I was wondering what was the best practice for initializing object attributes in Python, in the body of the class or inside the __init__
function?
i.e.
class A(object):
foo = None
vs
class A(object):
def __init__(self):
self.foo = None
Attributes defined in the class definition are considered class variables (like static variables in Java), while those set in the initializer are instance attributes (note the difference between
self.something = 1
andsomething = 1
). See this question for more details, and this one for even more. There is not a lot of practical difference between these two cases, as the class-level definition gives the attribute a default value, but if you want to use some kind of logic to set an attribute before using an object instance you should do it in the__init__()
method.If you want the attribute to be shared by all instances of the class, use a class attribute:
This causes
('foo',None)
to be a(key,value)
pair inA.__dict__
.If you want the attribute to be customizable on a per-instance basis, use an instance attribute:
This causes
('foo',None)
to be a(key,value)
pair ina.__dict__
wherea=A()
is an instance ofA
.