How much introspection is implementation dependent?
George Sakkis
george.sakkis at gmail.com
Fri Feb 2 20:12:00 EST 2007
On Feb 2, 6:56 pm, James Stroud <jstr... at mbi.ucla.edu> wrote:
> Hello,
>
> I wanted to automagically generate an instance of a class from a
> dictionary--which might be generated from yaml or json. I came up with this:
>
> (snip)
>
> ==
>
> #! /usr/bin/env python
>
> # automagical constructor
> def construct(cls, adict):
> dflts = cls.__init__.im_func.func_defaults
> vnames = cls.__init__.im_func.func_code.co_varnames
>
> argnames = vnames[1:-len(dflts)]
> argvals = [adict.pop(n) for n in argnames]
>
> return cls(*argvals, **adict)
>
> def test():
>
> class C(object):
> def __init__(self, arg1, arg2, kwa3=3):
> self.argsum = arg1 + arg2
> self.kwsum = kwa3
> def __str__(self):
> return "%s & %s" % (self.argsum, self.kwsum)
>
> # now a dict for autmagical generation
> adict = {'arg1':1, 'arg2':2, 'kwa3':42}
>
> print '======== test 1 ========'
> print adict
> print construct(C, adict)
>
> adict = {'arg1':1, 'arg2':2}
> print
> print '======== test 2 ========'
> print adict
> print construct(C, adict)
>
> if __name__ == "__main__":
> test()
What's the point of this ? You can call C simply by C(**adict). Am I
missing something ?
George
More information about the Python-list
mailing list