Python属性错误:对象没有属性。

3

当我使用双下划线时,出现错误AttributeError:'Organization'对象没有属性'__employees'。以下是代码。

 class Organization(object):
        __employees=[]

    google=Organization()
    google.__employees.append('Erik')

Python没有实现私有变量的概念。如果有私有变量,那么会出现错误。如果我移除一个下划线,则代码将不会报错执行。


2
https://dev59.com/Q3M_5IYBdhLWcg3wn0lO - kylieCatt
1个回答

5

你已将其声明为私有变量。

>>> class Organization(object):
...     __employees = []
... 
>>> google = Organization()
>>> google._Organization__employees.append('Erik')
>>> google._Organization__employees
['Erik']

>>> dir(Organization)
['_Organization__employees', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

如您所见,它使用_Classname__Variablename保存您的变量名称。 在您的情况下,它是_Organization__employees
根据Python文档: 任何形式为__spam(至少两个前导下划线,最多一个尾随下划线)的标识符都将被文本替换为_classname__spam,其中classname是当前类名,并剥离前导下划线。这种混淆是在不考虑标识符的句法位置的情况下完成的,因此它可以用于定义类私有实例和类变量、方法、存储在全局的变量,甚至是存储在其他类实例上的私有变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接