クラスには がない__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 = []