20

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'
4

2 に答える 2

32

クラスには がない__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 = []
于 2012-10-17T16:31:22.843 に答える