Python属性错误对象没有属性

new*_*day 3 python oop

当我应用两个下划线时,出现错误AttributeError: 'Organization' object has no attribute '__employees' Here is the code。

 class Organization(object):
        __employees=[]

    google=Organization()
    google.__employees.append('Erik')
Run Code Online (Sandbox Code Playgroud)

Python 没有实现私有变量的概念。如果是这样,我会得到什么错误。如果我删除一个下划线代码执行没有错误。

Tan*_*lam 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__']
Run Code Online (Sandbox Code Playgroud)

如您所见,它使用_Classname__Variablename保存您的可变名称。在您的情况下,它是_Organization__employees

来自Python 文档

任何 __spam 形式的标识符(至少两个前导下划线,最多一个尾随下划线)在文本上替换为 _classname__spam,其中 classname 是当前类名,去掉了前导下划线。这种修改是在不考虑标识符的句法位置的情况下完成的,因此它可以用于定义类私有实例和类变量、方法、存储在全局变量中的变量,甚至存储在实例中的变量。在其他类的实例上,这个类是私有的。