assign class variable in __init__

Peter Otten __peter__ at web.de
Tue Jun 8 12:37:31 EDT 2010


Ross Williamson wrote:

> Hi Everyone,
> 
> Just a quick question - Is it possible to assign class variables in
> the __init__() - i.e. somthing like:
> 
> def __init__(self,self.source = "test", self.length = 1)
> 
> rather than
> 
> def __init__(self,source = "test", length = 1):

No. If you are just lazy, try

>>> import sys
>>> def update_self():
...     d = sys._getframe(1)
...     d = d.f_locals
...     self = d.pop("self")
...     for k, v in d.iteritems():
...             setattr(self, k, v)
...
>>> class A(object):
...     def __init__(self, source="test", length=1):
...             update_self()
...     def __repr__(self):
...             return "A(source=%r, length=%r)" % (self.source, 
self.length)
...
>>> A()
A(source='test', length=1)
>>> A(length=42)
A(source='test', length=42)

Personally, I prefer explicit assignments inside __init__().

Peter



More information about the Python-list mailing list