Python: la instancia no tiene atributo

Tengo un problema con la lista dentro de una clase en python. Aquí está mi código:

class Residues: def setdata(self, name): self.name = name self.atoms = list() a = atom C = Residues() C.atoms.append(a) 

Algo como esto. Me sale un error diciendo:

 AttributeError: Residues instance has no attribute 'atoms' 

Su clase no tiene un __init__() , por lo que en el momento en que se __init__() una instancia, el atoms atributo no está presente. Tendrías que hacer C.setdata('something') para que C.atoms esté disponible.

 >>> C = Residues() >>> C.atoms.append('thing') Traceback (most recent call last): File "", line 1, in  B.atoms.append('thing') AttributeError: Residues instance has no attribute 'atoms' >>> C.setdata('something') >>> C.atoms.append('thing') # now it works >>> 

A diferencia de lenguajes como Java, donde en tiempo de comstackción se sabe qué atributos / variables miembro tendrá un objeto, en Python puede agregar atributos dinámicamente en tiempo de ejecución. Esto también implica que las instancias de la misma clase pueden tener diferentes atributos.

Para asegurarse de que siempre tendrá (a menos que se meta con él en la línea, entonces es su propia culpa) una lista de atoms que podría agregar un constructor:

 def __init__(self): self.atoms = []