20

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

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

a = atom
C = Residues()
C.atoms.append(a)

像这样的东西。我收到一条错误消息:

AttributeError: Residues instance has no attribute 'atoms'
4

2 回答 2

32

您的类没有__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
>>> 

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

为了确保你总是有(除非你把它弄乱了,那是你自己的错)一个atoms列表,你可以添加一个构造函数:

def __init__(self):
    self.atoms = []
于 2012-10-17T16:31:22.843 回答
0

该错误意味着类 Residues 没有函数调用原子。解决方案可能如下:

class Residues:
    def setdata(self,  atoms, name=None):
        self.name = name
        self.atoms =[]

C = Residues()
C.setdata(atoms= " a ")
于 2021-12-29T02:41:22.587 回答