我发现自己用这样的构造函数编写了很多类:
class MyClass(object):
def __init__(self, foo, bar, foobar=1, anotherfoo=None):
self.foo = foo
self.bar = bar
self.foobar = foobar
self.anotherfoo = anotherfoo
Run Code Online (Sandbox Code Playgroud)
这是一个糟糕的代码味道吗?Python是否提供了更优雅的处理方式?
我的类甚至一些构造函数不仅仅是我所展示的,但我通常有一个args列表传递给构造函数,最终被分配给类似命名的成员.我做了一些可选的参数来指出这样做的问题:
class MyClass(object):
def __init__(self, arg_dict):
self.__dict__ = arg_dict
Run Code Online (Sandbox Code Playgroud)
如果他们是kwargs,你可以这样做:
def __init__(self, **kwargs):
for kw,arg in kwargs.iteritems():
setattr(self, kw, arg)
Run Code Online (Sandbox Code Playgroud)
posargs有点棘手,因为你没有以一种很好的方式获得命名信息.
如果要提供默认值,可以这样做:
def __init__(self, **kwargs):
arg_vals = {
'param1': 'default1',
# ...
}
arg_vals.update(kwargs)
for kw,arg in arg_vals.iteritems():
setattr(self, kw, arg)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1619 次 |
| 最近记录: |