Python: instance has no attribute

I have a problem with list within a class in python. Here's my code :

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

Something like this. I get an error saying:

AttributeError: Residues instance has no attribute 'atoms'
6

2 Answers

Your class doesn't have a __init__(), so by the time it's instantiated, the attribute atoms is not present. You'd have to do C.setdata('something') so C.atoms becomes available.

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

Unlike in languages like Java, where you know at compile time what attributes/member variables an object will have, in Python you can dynamically add attributes at runtime. This also implies instances of the same class can have different attributes.

To ensure you'll always have (unless you mess with it down the line, then it's your own fault) an atoms list you could add a constructor:

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

the error means the class Residues doesn't have a function call atoms. The solution could be as follows:

class Residues: def setdata(self, atoms, name=None): self.name = name self.atoms =[]
C = Residues()
C.setdata(atoms= " a ")

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like