1. ホーム
  2. python

[解決済み] Python: インスタンスに属性がない

2022-02-05 21:27:35

質問

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'

解決方法は?

あなたのクラスには __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 = []