我发现自己用这样的构造函数编写了很多类:
class MyClass(object): def __init__(self, foo, bar, foobar=1, anotherfoo=None): self.foo = foo self.bar = bar self.foobar = foobar self.anotherfoo = anotherfoo
这是难闻的代码气味吗?Python是否提供更优雅的方式来处理此问题?
我的类,甚至一些构造函数都不仅仅是我所展示的,但是我通常有一个传递给构造函数的args列表,最终将它们分配给名称相似的成员。我将一些参数设为可选,以指出执行以下操作时出现的问题:
class MyClass(object): def __init__(self, arg_dict): self.__dict__ = arg_dict
如果他们很讨厌,则可以执行以下操作:
def __init__(self, **kwargs): for kw,arg in kwargs.iteritems(): setattr(self, kw, arg)
posargs有点棘手,因为您不会以很好的方式获得命名信息。
如果要提供默认值,可以这样:
def __init__(self, **kwargs): arg_vals = { 'param1': 'default1', # ... } arg_vals.update(kwargs) for kw,arg in arg_vals.iteritems(): setattr(self, kw, arg)