3 ms·
Here's another magical version that uses a class decorator: class Autoinit(object): def __call__(self, cls): orig_init = cls.__init__
by lukashed 13y ago
Here's another magical version that uses a class decorator:
class Autoinit(object):
def __call__(self, cls):
orig_init = cls.__init__
arg_count = orig_init.func_code.co_argcount
arg_vars = orig_init.func_code.co_varnames[1:1 + arg_count]
class Wrapped(cls):
def __init__(self, *args, **kwargs):
for pos, var in enumerate(arg_vars[:len(args)]):
setattr(self, var, args[pos])
for var in kwargs:
setattr(self, var, kwargs[var])
return orig_init(self, *args, **kwargs)
return Wrapped
if __name__ == '__main__':
@Autoinit()
class Test(object):
def __init__(self, a, b):
pass
t = Test(1, b=2)
print t.a, t.b
[Disclaimer: This is my first class decorator. Please correct me if I'm wrong.]