这是我的代码:
class Dog:
def __init__(self,name,age):
self.n = name
self.__a = age
lucy=Dog("lucy",2)
print(lucy.__a)
jack=Dog("jack",3)
jack.__a=10
print(jack.__a)
当我运行它时,print(lucy.__a)
给了我一个错误,这是可以理解的,因为__a
是一个私有实例变量。令我困惑的是,print(jack.__a)
完全正常。我认为这是因为我们之前有jack.__a=10
。谁能向我解释到底发生了什么?
答案 0 :(得分:3)
检查dir(jack)
的结果会显示正在发生的事情:
['_Dog__a', '__a', ...]
从类中分配__a
属性调用名称修改;该值存储在_Dog__a
中。但是从外部分配它不会调用它,因此单独的值作为__a
存储在实例上。所以你可以这样做:
>>> jack._Dog__a
3
>>> jack.__a
10