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