Ralf W. Grosse-Kunstleve wrote:
> My initial proposal
> (http://cci.lbl.gov/~rwgk/python/adopt_init_args_2005_07_02.html) didn't
> exactly get a warm welcome...
> 
> And Now for Something Completely Different:
> 
> class autoinit(object):
> 
>   def __init__(self, *args, **keyword_args):
>     self.__dict__.update(
>       zip(self.__autoinit__.im_func.func_code.co_varnames[1:], args))
>     self.__dict__.update(keyword_args)
>     self.__autoinit__(*args, **keyword_args)
Should be:
     class autoinit(object):
         def __init__(self, *args, **keyword_args):
             for name, value in zip(self.__autoinit__.im_func.func_code.
                                             co_varnames[1:], args):
                 setattr(self, name, value)
             for name, value in keyword_args.items():
                 setattr(self, name, value)
             self.__autoinit__(*args, **keyword_args)

Since using setattr will take care of any slots used in other classes.
Not all data is stored in the __dict__.

For example:

     class Example(autoinit):
         __slots__ = 'abc',
         def __autoinit__(self, a=1, abc=1):
             print a, abc

     a = Example(1,2)
     print a.__dict__
     print a.a
     print a.abc


--Scott David Daniels
[EMAIL PROTECTED]
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to