それがインスタンス化の時代で、属性atoms
が存在しないので、あなたのクラスは、__init__()
を持っていない:私はというエラーを取得します。あなたは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
>>>
Pythonであなたが実行時に動的に属性を追加することができ、オブジェクトが持つことになります/メンバ変数をどの属性コンパイル時にあなたが知っているJavaの、のような言語とは異なり。これはまた、同じクラスのインスタンスが異なる属性を持つことができることを意味します。あなたが常にありますようにするには
(それにあなたが混乱ダウンラインをしない限り、それはあなた自身のせいです)あなたは、コンストラクタを追加することができatoms
リスト:
def __init__(self):
self.atoms = []
インデントあなたのコード正しく。 –
yyouがPython 2.xを使用している場合は、「オブジェクト」からクラスを継承するか、将来の不正行為を把握するのが本当に難しくなります。 – jsbueno
@jsbueno:私はそれを強く疑う。古いスタイルのクラスは、その名前が意味するように、長い間、長い間存在しており、何らかの形で、人々は自分たちの "誤った動き"を把握しています。 – martineau