【问题标题】:Python attribute error object has no attributePython属性错误对象没有属性
【发布时间】:2014-11-21 05:53:38
【问题描述】:

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

 class Organization(object):
        __employees=[]

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

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

【问题讨论】:

标签: python oop


【解决方案1】:

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

>>> 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 docs:

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

【讨论】: