class,用于创建和管理新对象,python程序的组成单元,逻辑和数据封装的另一种形式,类似与函数和模块。
类特性:多重实例、通过继承定制、运算符重载。
类对象的特性:
1.class语句创造类并将它赋值给变量名。
2.class语句内的赋值语句创造类的属性,class语句的作用域变成类属性的命名空间,类似与模块的全局作用域。
3.类提供了对象的行为,类属性的行为可被实例对象共享,包括def创造的方法。
实例对象的特性:
1.像调用函数那样调用类对象创造新的实例对象。
2.每个实例对象继承类对象的属性并获得自己的命名空间。
3.对方法内self属性做赋值运算会产生实例自己的属性,赋值运算会修改或者创造实例的数据,不会修改类的数据。
属性继承:【object.attribute】从下至上,从左往右。继承是简单的"树"搜索。
属性继承特性:
1.超类列在类开头的括号中。
2.类从它的超类中继承属性。
3.实例会继承所有可读取类的属性。
4.每个object.attribute都会进行全新的搜索。
5.逻辑的修改是通过创建子类而不是修改超类【定制】。
运算符重载:用类写成的对象,截获并响应应用在内置类型上的运算
1.以双下划线命名的方法(_x_)是特殊钩子,提供特定命名的方法去拦截运算。
2.当实例出现在内置运算时,这种方法会自动调用【如实例继承了_add_方法,对象出现在+表达式内时】。
3.类可覆盖多数内置运算。
4.运算符覆盖的方法没有默认值,而且也不需要【类没有定义或继承运算重载方法,那么相应的运算在类实例中并不支持】。
5.运算符可让类与python类型对象相集成。
编写类树:每个class语句生成新的类对象,实例自动连接创造它的类【从下至上,从左往右】。
属性是在class语句中通过赋值语句添加到类中,不是潜入在函数的def语句内。
属性通常在类内,对传给的函数的特殊参数,做赋值运算添加在实例中。
类对象提供行为,是实例对象的工厂;实例对象是程序实际处理的对象;类对象来自语句,实例对象来自调用。
类也可是模块的属性:导入模块中的类【from module import class 、import module ,class a (module.class)【引用】】
实例:构造函数、方法、运算符重载、子类定制、内省函数
实例1:
#通过class语句创造三个类对象,两次类调用创造了test和test1两个实例对象,实例记着它的类c,c3也记着它的超类a和b
#类中函数return可有可无,继承时直接调用方法和属性
class a:
def func(self,list):#def出现在类内成为方法,自动接收第一个参数self【实例名】
self.L=[x*2 for x in list]#赋值操作,参与实例运算
return self.L
print("class1")
class b:
print("class2")
class c(a,b):#超类a、b 子类c
N=5#类的属性
def getvalue(self,str):#def出现在类内成为方法,自动接收第一个参数self【实例名】
self.value=str#赋值操作,参与实例运算
self.value1=c.N#类属性参与赋值操作
return self.value
class d:pass #空类
test=c()#类对象调用创建实例
test1=c()#类对象调用创建实例
test.getvalue("test")#调用函数【方法】【类属性】、继承
test1.func([1,2,3])#L1=test1.func([1,2,3]);print(L1)==print(test1.L)
print(test.value,test.value1,test1.L,c.N,test.N,test1.N)#test [2, 4, 6] 5 5 5
test.value="change"
test.value1=20
test.N=10#在外部修改实例的属性【也可在内部】,并不影响类对象的属性
test.new="new"#添加实例新属性
print(test.value,test.value1,test.