Peter Otten wrote:
Jason Scheirer wrote:

On Jun 8, 9:37 am, Peter Otten <__pete...@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
still

def __init__(self, source="test", length=1):
   self.source = source
   self.length = length

is the way to go. OP's original idea is a bad idea :).
Could be a problem with hundreds of parameters, but who write constructors with hundreds of parameters ?

JM
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to