Python:实例没有属性

Man*_*kus 18 python class attributeerror

我在python中的类中列表有问题.这是我的代码:

class Residues:
    def setdata(self, name):
        self.name = name
        self.atoms = list()

a = atom
C = Residues()
C.atoms.append(a)
Run Code Online (Sandbox Code Playgroud)

像这样的东西.我收到一个错误说:

AttributeError: Residues instance has no attribute 'atoms'
Run Code Online (Sandbox Code Playgroud)

Nul*_*ion 30

您的类没有__init__(),因此在实例化时,该属性atoms不存在.你不得不做C.setdata('something')这样C.atoms变为可用.

>>> C = Residues()
>>> C.atoms.append('thing')

Traceback (most recent call last):
  File "<pyshell#84>", line 1, in <module>
    B.atoms.append('thing')
AttributeError: Residues instance has no attribute 'atoms'

>>> C.setdata('something')
>>> C.atoms.append('thing')   # now it works
>>> 
Run Code Online (Sandbox Code Playgroud)

与Java之类的语言不同,在编译时您知道对象将具有哪些属性/成员变量,在Python中您可以在运行时动态添加属性.这也意味着同一个类的实例可以具有不同的属性.

为了确保你总是拥有(除非你把它搞砸了,然后这是你自己的错),atoms你可以添加一个构造函数:

def __init__(self):
    self.atoms = []
Run Code Online (Sandbox Code Playgroud)