web-dev-qa-db-ja.com

Python:インスタンスには属性がありません

Pythonのクラス内のリストに問題があります。ここに私のコードがあります:

class Residues:
    def setdata(self, name):
        self.name = name
        self.atoms = list()

a = atom
C = Residues()
C.atoms.append(a)

このようなもの。次のエラーが表示されます:

AttributeError: Residues instance has no attribute 'atoms'
18

クラスには__init__()がないため、インスタンス化されるまでに、属性atomsは存在しません。 C.setdata('something') so 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 = []
29