python - class类 (一)
三大编程范式
1.面向过程
2.函数式
3.面向对象
注意 编程范式没有高低之分,只有适用不适用.
面向对象编程:
编程是程序源用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合 ,正所谓条条大道通罗马,实现一个任务的方式很多种不同的方式,对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式。不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路,大多数语言只支持一种编程范式,当然有些语言可以同时支持多种编程范式,两种最重要的编程范式分别是面向对象和面向对象过程。
oop编程是利用“类”和“对象”老创建各种模型来实现对真是世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率,另外,基于面向对象的程序可以使它人更容易理解你的代码逻辑,从而使团队开发变得更加从而。
面向对象的几个核心特性如下:
object对象
一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同。
encapsulation封装(类)
在类中对数据的复制、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含看类的数据和方法。
inheritance继承:
一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承。
类的特殊方法以及定义:
#类的特殊方法以及定义: #类声明:驼峰命名
# class Class_Name(object):
# '''__doc__ 的特殊属性.文档属性'''
#
# #类的初始化方法:(这个方法没有返回值,返回为None)
# def __init__(self,name):
# self.name = name #实例化的初始化字典:
# print(abc.__dict__) #属性字典(类特殊属性*****)
# print(Class_Name.__dict__) #文档属性(类特殊属性*****)
# print(Class_Name.__doc__) #类的名字(类特殊属性)
# print(Class_Name.__name__) #类的起始继承(类特殊属性)
# print(Class_Name.__bases__) #类的模块(类特殊属性)
# print(Class_Name.__module__)
实例化相关:
# 实例化章节 # question-1:
# 有人说,类有数据属性和函数属性,实例对象是由类产生的,所以实例也有数据属性和函数属性?
#错误!
# question-2:
# 实例由类产生的,所以实例肯定能访问类属性?
#错误! #实例化的对象本身没有函数方法,其函数方法是只是引用类的函数方法.
#实例化对象的作用域属性为class类中init的属性,当访问的属性没有时,它会向class类的作用域中找访问的属性(类的作用域). #实例化:
# class Class_Name(object):
# def __init__(self,name):
# self.name = name
# def A(self):
# return "AAA"
#
# abc = Class_Name('XA')
# print(Class_Name.__dict__)
# print(abc.__dict__) #question-3
#在类的属性定义中,加self 或 不加 self 的区别是什么?
# self ,界定了类的类属性和实例化属性.
#不加self,表示是类的一个属性(可以通过“类名.变量名”的方式引用)
#加self,表示是类的实例的一个属性(可以通过“实例名.变量名”的方式引用)
#
# class Class_Name(object):
# def __init__(self,name):
# self.name = name
# def A(self):
# return "AAA"
# def B():
# return "BBB"
# #实例化
# abc2 = Class_Name('X2')
# #实例化调用实例化属性:(正常输出)
# print(abc2.A())
# #实例化调用类的属性(报错)
# print(abc2.B())
# #类调用类属性:(正常输出)
# print(Class_Name.B())
类属性操作:
# 类属性操作:
# class A(object):
# a = 123 # #查看类的属性:
# print(A.a)
#
# #修改类的属性:
# A.a = 321
# print(A.a)
# print(A.__dict__)
#
# #增加类的属性:
# A.b = 111111
# print(A.b)
# print(A.__dict__)
#
# #删除
# del A.b
# print(A.__dict__) #**********************************
# 类函数属性操作:(定义类函数方法时不要加self,加self就是实例化属性了)
# class A(object):
# def AA():
# print("aa") #查看类的函数属性:(输出:aa)
# A.AA() #修改类的函数属性:(输出:BB)
# def BB():
# print('BB')
#
# A.AA = BB
# A.AA() #删除类的函数属性:
# print(A.__dict__)
# del A.AA
# print(A.__dict__) #增加类的函数属性
# def CC():
# print('CC')
# print(A.__dict__)
# A.CC = CC
# print(A.__dict__)
实例属性操作:
#实例属性操作:
class A(object):
a = 123
def __init__(self,name):
self.name = name
def B(self):
print("BB") #实例化:
AA = A('anec') #查看实例字典
print(AA.__dict__)
#查看实例属性:
print(AA.name)
#查看实例函数属性:
print(AA.B)
AA.B() # #增加一个实例属性
AA.C = 123
print(AA.__dict__)
print(AA.C) #增加一个实例函数属性:(可以做到,但不建议这种操作)
# def D():
# print("DD")
# AA.D = D
# print(AA.__dict__)
# print(AA.D)
# AA.D() #不要修改底层的属性字典(可以做到,但不建议这种操作)
# AA.__dict__['E'] = "EE"
# print(AA.__dict__)
# print(AA.E) #修改实例属性
AA.name = "xiaohong"
print(AA.__dict__)
print(AA.name) #删除实例属性
del AA.name
print(AA.__dict__)
对象、实例、全局变量 关系:
例一:
# 例一:
class Chinese:
country = "china"
def __init__(self,name):
self.name = name p1 = Chinese('anec')
print(p1.country)
p1.country = "美国"
print(Chinese.country)
print(p1.country)
#上面输出结果是???
# 结果为:
# china
# china
# 美国
#p1自身没有函数属性,所以第一个p1是类的country : china
#类访问自身的属性country :china
#p1定义了一个新的country属性,p1访问country属性时,发现自身有这个属性所以:美国
例二:
#例二:
country = "中国"
class Chinese:
country = "湖南"
def __init__(self,name):
self.name = name
print(country)
p1 = Chinese('anec') print(p1.country)
print(Chinese.country)
#输出结果为?????
# 中国
# 湖南
# 湖南
#1.这里要注意类和实例访问属性都是通过 类名/实例名.属性/函数属性 的形式访问的,
#2.这里print(country)没有以上的方法调用,所以访问的是全局的变量值
#3.init在实例化之前执行,所以输出了中国,而后两个打印都是访问的类的属性.
例三:
# 例三:
class Chinese:
xx = ['a','b']
def __init__(self,name):
self.name = name p1 = Chinese('anec')
p2 = Chinese('anec2') p1.xx = [1,2,3]
print(Chinese.xx)
print(p1.xx)
print(p1.__dict__) print("*"*20) p2.xx.append("C")
print(Chinese.xx)
print(p2.xx)
print(p2.__dict__) # 结果:
# ****************
# ['a', 'b']
# [1, 2, 3]
# {'name': 'anec', 'xx': [1, 2, 3]}
# ********************
# ['a', 'b', 'C']
# ['a', 'b', 'C']
# {'name': 'anec2'}
# ****************
#注:
# p1是新增了一个xx属性,所以在p1.__dict__中新增了一个属性xx
# p2 并没有新增属性,而是在类的属性上新增一个元素,所以类属性增加了元素,p2__dict__中没有新增属性
python - class类 (一)的更多相关文章
- Python笔记——类定义
Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...
- 【python】类中的self
在python的类中,经常会写self,代表对象自己.如下例: #coding=utf-8 class Foo: def __init__(self, name): self.name = name ...
- python基础——类和实例
python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...
- python(6)-类
面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类" 和 "对 ...
- 从C#到Python —— 4 类及面向对象
http://www.cnblogs.com/yanxy/archive/2010/04/04/c2p_4.html 如果你熟悉C#,那么对类(Class)和面向对象(Object Oriented) ...
- Python type类具体的三大分类:metaclasses,classes,instance
Python type类视角中的对象体系需要我们不断的学习,其中我们使用的时候需要注意.下面我们就看看如何才能更好的运用Python type类.下面的文章希望大家有所收获. 在单纯的Python t ...
- python元类分析
刚開始接触到Python新式类中的元类的概念的时候非常是纠结了下..不知道这是个啥东西... 用下面几个定义来说明吧: (1)Python中,类也是对象..仅仅只是这样的对象比較的特殊,他用于创建别的 ...
- Python用类实现串以及对串的方法进行单元测试
串是一种常见的数据结构,这里使用Python定义类来实现相应的方法.先看代码,再对相关知识进行讲解. # coding=utf-8 __all__=['ADTString'] class ADTStr ...
- Python基础-类
Python基础-类 @(Python)[python, python基础] 写在前面 如非特别说明,下文均基于Python3 摘要 本文重点讲述如何创建和使用Python类,绑定方法与非绑定方法的区 ...
- 谨慎修改Python的类属性
Python的类和类实例都是可变对象,可以随时给属性赋值,并且在原处修改. 在对类属性进行修改时需要特别小心,因为所有的类实例都继承共享类属性,除非实例本身存在和类属性同名的属性.对类属性进行修改,会 ...
随机推荐
- Django-website 程序案例系列-13 中间件
自定义中间件1: from django.utils.deprecation import MiddlewareMixin # 中间件需要引用的包 class Row1(MiddlewareMixin ...
- JeeSite框架中httpSession.invalidate();无效
想要实现一个功能:同一个用户在两个不同的浏览器中登录,后面的踢掉之前的登录. 本来的思路是在httpSession监听器中进行判断.但是在使用httpSession.invalidate();销毁Se ...
- Git储藏与恢复
cd /f cd android git status echo 'shoping' >> 4 //修改内容 git status git stash //git储藏 git status ...
- 自学Linux Shell11.3-使用变量
点击返回 自学Linux命令行与Shell脚本之路 11.3-使用变量 Shell脚本的执行通常可以采用以下几种方式: 1):bash script-name或sh script-name(推荐使用) ...
- 洛谷 P1879 [USACO06NOV]玉米田 解题报告
P1879 [USACO06NOV]玉米田Corn Fields 题目描述 农场主\(John\)新买了一块长方形的新牧场,这块牧场被划分成\(M\)行\(N\)列\((1 ≤ M ≤ 12; 1 ≤ ...
- Android 屏幕手势滑动中onFling()函数的技巧分析
关于如何处理手势操作以及那四个基本固定的顺序我就不讲解了,这里直接跳到我们获得瞬间滑动后回调onFling()这个抽象函数时,应该如何根据参数比较准确的判断滑动方向.如果你没有前面的基础知识,你可以去 ...
- SDL_BlitSurface
SDL_BlitSurface Use this function to perform a fast surface copy to a destination surface. Contents ...
- Git中设置代理和取消代理
设置Socks5代理 git config --global http.proxy 'socks5://127.0.0.1:1080' && git config --global h ...
- 转载:C++类内存分布
本文转自:http://www.cnblogs.com/jerry19880126/p/3616999.html,原文写的非常好,从中学到了虚继承的概念,也学会了用VS查看内存分布. 说下C++内存分 ...
- [HEOI2013]SAO ——计数问题
题目大意: Welcome to SAO ( Strange and Abnormal Online).这是一个 VR MMORPG, 含有 n 个关卡.但是,挑战不同关卡的顺序是一个很大的问题. 有 ...