Ihre Klasse hat keine __init__()
, so durch die Zeit es instanziiert ist, atoms
das Attribut nicht vorhanden ist. Sie müssten C.setdata('something')
tun, damit C.atoms
verfügbar wird.
>>> 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
>>>
Anders als in Sprachen wie Java, wo Sie bei der Kompilierung wissen, welche Attribute/Membervariablen ein Objekt hat, in Python Sie dynamisch Attribute zur Laufzeit hinzufügen können. Dies bedeutet auch, dass Instanzen derselben Klasse unterschiedliche Attribute haben können.
Sie immer (die Linie, es sei denn, Sie verwirren mit ihm nach unten, dann Ihre eigene Schuld es ist), um sicherzustellen, werden eine atoms
Liste Sie einen Konstruktor könnte hinzufügen: richtig
def __init__(self):
self.atoms = []
indent Code. –
Nebenbei, wenn Sie Python 2.x verwenden, sollten Sie Ihre Klasse von "Objekt" erben oder unterliegen wirklich schwer zu Fehlverhalten in der Zukunft herausfinden. – jsbueno
@jsbueno: Ich bezweifle das stark. Old-Style-Klassen gibt es schon lange, wie der Name schon sagt, und irgendwie haben die Leute es geschafft, ihre "Fehlverhalten" gut zu verstehen. – martineau