Подтвердить что ты не робот

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

Ответ 1

В вашем классе нет __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 = []