Ответ 1
В вашем классе нет __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 = []