assign class variable in __init__

Peter Otten __peter__ at web.de
Tue Jun 8 13:36:14 EDT 2010


Jason Scheirer wrote:

> On Jun 8, 9:37 am, Peter Otten <__pete... at web.de> wrote:
>> 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
> 
> Or more simply
> 
> def __init__(self, source = "test", length = 1):
>   for (k, v) in locals().iteritems():
>     if k != 'self':
>       setattr(self, k, v)

The idea was that you put update_self() into a module ready for reuse...

Peter



More information about the Python-list mailing list