Twoja klasa nie posiada __init__()
, więc do czasu to instancja, atrybut atoms
nie jest obecny. Trzeba by było zrobić C.setdata('something')
, aby stała się dostępna 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
>>>
W przeciwieństwie do języków takich jak Java, gdzie wiesz, w czasie kompilacji jakie atrybuty zmiennych/członek przedmiotem będą miały w Pythonie można dynamicznie dodać atrybuty w czasie wykonywania. Oznacza to również, że instancje tej samej klasy mogą mieć różne atrybuty.
Aby zapewnić zawsze będziesz miał (chyba, że bałagan z nim w dół linia, to twoja własna wina) lista atoms
można dodać Konstruktor:
def __init__(self):
self.atoms = []
wcięcia swoją prawidłowo kod. –
Na marginesie, jeśli używasz Pythona w wersji 2.x, powinieneś dziedziczyć swoją klasę z "obiektu" lub być naprawdę trudnym do wykrycia niewłaściwych zachowań w przyszłości. – jsbueno
@jsbueno: Wątpię w to. Klasa w starym stylu istnieje od dawna, jak sama nazwa wskazuje, i jakoś ludziom udało się rozgryźć "złe zachowanie". – martineau