Python属性错误对象没有属性

时间:2014-11-21 05:53:39

标签: python oop

当我应用两个下划线时,我收到错误AttributeError: 'Organization' object has no attribute '__employees' 这是代码。

 class Organization(object):
        __employees=[]

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

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

1 个答案:

答案 0 :(得分:2)

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

>>> 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 doc s:

  

表单__spam的任何标识符(至少两个前导下划线,   最多一个尾随下划线)在文本上被替换为   _classname__spam,其中classname是当前的类名,其中前导下划线被剥离。这种破坏是不加考虑的   到标识符的句法位置,因此它可以用于   定义类 - 私有实例和类变量,方法,变量   存储在全局变量中,甚至存储在实例中的变量。私人的   这个类在其他类的实例上。