assign class variable in __init__

Jason Scheirer jason.scheirer at gmail.com
Tue Jun 8 13:10:09 EDT 2010


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)



More information about the Python-list mailing list