装饰魔术!
>>> class SomeClass(): @ArgsToSelf def __init__(a, b=1, c=2, d=4, e=5): pass>>> s=SomeClass(6,b=7,d=8)>>> print s.a,s.b,s.c,s.d,s.e6 7 2 8 5
在定义时:
>>> import inspect>>> def ArgsToSelf(f): def act(self, *args, **kwargs): arg_names,_,_,defaults = inspect.getargspec(f) defaults=list(defaults) for arg in args: setattr(self, arg_names.pop(0),arg) for arg_name,arg in kwargs.iteritems(): setattr(self, arg_name,arg) defaults.pop(arg_names.index(arg_name)) arg_names.remove(arg_name) for arg_name,arg in zip(arg_names,defaults): setattr(self, arg_name,arg) return f(*args, **kwargs) return act
当然,您可以一次定义此装饰器,并在整个项目中使用它。
另外,此装饰器不仅可用于任何对象函数
__init__。



