重点
python中实例访问属性的顺序为:先查找同名的实例属性并返回值,如果找不到就会查找同名的类属性并返回值。
class MyClass(object):
name = 'default'
def __init__():
self.age = 18
if __name__ == '__main__':
c = MyClass()
# 访问的是类属性 等同于 c.__class__.name
c.name
# 需要注意这是动态创建实例属性
c.name = 'ww'
print(c.name)
print(c.__class__.name)
# 结果不同分别是 ww 和 default
小结
由于类的访问顺序问题,我们需要特别注意实例在访问属性时,尽力避免实例对类属性的直接访问,尤其是赋值,因为赋值是属于创建类属性同名的实例属性。