传送门:Python类属性11.属性获取机制(向上搜索)python中有一个属性获取的向上搜索机制。如果查找找不到,就会报错。1.1代码+画图演示搜索执行过程:使用对象。类属性输出总结果:classTool(object):#使用赋值语句定义类属性,记录所有工具对象个数#初始个数为0count=0def__init__(self,name):self.name=name#每增加一个工具对象,class属性的值就增加1Tool.count+=1#1.创建一个工具对象tool1=Tool("wrench")tool2=Tool("vice")tool3=Tool("axe")#2.输出工具对象总数#print(Tool.count)print("工具对象总数%d"%tool1.count)执行结果:注意:是否是tool1.countortool2.countortool3.count的结果是3图:文字说明:Python解释器从上到下依次执行代码。到了第一行,发现是类,并不会马上执行,而是往下看可执行代码。第13行代码在内存中创建了一个叫做wrench的工具。工具对象中只记录工具的名称。同时,在执行初始化方法时必须修改方法中class属性的值。(这段代码Tool.count=+1)所以count值由0变为1。初始化方法完成,内存中已经存在工具对象wrench,接着代码继续往下执行,一个虎钳工具为在第14行创建,当执行初始化方法时,count的值会加1,此时count的值变为2,初始化方法完成。代码继续执行到第15行,继续在内存中创建一个bucket工具。同时,执行初始化方法时,count的值会加1。这时候count的值就发生了变化。进入3。关键时刻:此时执行19行代码,打印tool1的count属性。在打印tool1的count属性时,Python解释器是这样执行的:首先,Python解释器会检查tool1的对象中是否有count属性。如果有则直接输出,如果没有则按照向上查找的方式向上查找创建工具对象的类,检查该类中是否有count的类属性,如果找到则输出控制台中类属性的值。1.2因此,访问类属性的方式有两种:类名。类属性对象。class属性(不推荐)二、object.class属性的陷阱method:code:classTool(object):#使用赋值语句定义class属性,记录所有tool对象的个数#初始个数为0count=0def__init__(self,name):self.name=name#每增加一个工具对象,类属性的值加1Tool.count+=1#1.创建工具对象tool1=Tool("wrench")tool2=Tool("vice")tool3=Tool("axe")#2.输出工具对象总数tool1.count=100print("工具对象总数%d"%tool1.count)print("类中class属性的值====>%d"%Tool.count)执行结果:误导结果为100执行过程:文字说明:首先从第一行到第15行的过程同上。当执行到第18行时,使用赋值语句设置属性值。Python解释器执行到这里时,并没有像上面说的那样去查找class属性,而是Python解释器执行了赋值。语句执行时会检查wrench内存中是否有count属性。如果没有,会直接给对象添加一个count属性,值为100。因此,当第19行代码执行时,count属性值为100,而第18行代码还没有修改为类属性,所以在第20行代码处通过类名访问类属性还是当时的值3。注意:如果使用object.classattribute=value赋值语句,只会给对象增加一个属性,class属性的值不受影响。更多相关Python教程,可以到Python自学网(www.wakey.com.cn/)从基础入门免费课程开始,逐步深入学习python全栈系统课程,适合初学者掌握全栈开发。
