python类的类属性与实例属性有如下4种初始化方法:
#python programing facing object
class Test:
#count=3 #方法1:作为类属性初始化
def __init__(self):
self.count=10 #方法2:作为实例属性,在构造函数中初始化
Test2.count=5 #方法3:作为类属性,在构造函数中初始化
#Test2.count=5
#self.count=30
count=3 #方法1:作为类属性初始化
a=Test()
a.newcount=4 #方法4:作为自定义属性(class attribute)
方法1,该语句在class-suite中的位置无关紧要,实例化过程中该语句总是在init之前被执行,执行方式为:Test.count保持前值,self.count=Test.count。若为类的首次实例化,则前值为类体中的初始化值3。待方法1的语句执行完毕,才会进入init函数体执行“方法2、3”对应的赋值语句。再之后才算完成了本次实例化过程。
在没有方法1的语句时,方法2、3,不论二者顺序如何,每次实例化都会先执行Test.count=5,self.count=Test.count。之后才会寻找并执行self.count自己的初始化语句。即是说,如果类体中没有self.count的初始化语句,则其可由Test.count的初始化语句衍生;反之不然,类体中无Test.count初始化语句时,self.count必须靠自己的初始化语句实现初始化。
若类体中没有Test.count初始化语句则类外不能直接引用Test.count; 若类体中同时不具有Test.count与self.count的初始化,则类体外不能直接引用Test.count和a.count。只要类体中有Test.count的初始化语句,则类体外二者都可以直接引用。
方法4提供了类外无法直接引用的数据被类的实例引用的途径。之前必须先进行初始化。例如在方法4的位置上有Test.newcount=1,则之后Test.newcount可用了。
自定义属性可以是类属性,也可以是实例属性。