在python中为对象添加属性

时间:2017-11-07 15:52:51

标签: python

这是我的代码:

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。谁能向我解释到底发生了什么?

1 个答案:

答案 0 :(得分:3)

检查dir(jack)的结果会显示正在发生的事情:

['_Dog__a', '__a', ...]

从类中分配__a属性调用名称修改;该值存储在_Dog__a中。但是从外部分配它不会调用它,因此单独的值作为__a存储在实例上。所以你可以这样做:

>>> jack._Dog__a
3
>>> jack.__a
10