假设我在python中有一个构造函数:
def __init__(self, bBoolFlags_a_Plenty):
self.bBoolFlags_a_Plenty = self.bBoolFlags_a_Plenty
[...] # one line for each bool flag passed in.
有没有办法将传递给init()的函数参数分配给与函数参数同名的类的成员变量/属性,而不必手写每个参数?
在范围更为有限的事情上,也许一个班轮就可以了。类似的东西:
self.* = ( arg_bool1, arg_bool2, arg_bool3, arg_bool4)
实际上,我更喜欢后者,因为我不希望将“厨房水槽”分配给自己。
感谢。
答案 0 :(得分:6)
您可以使用kwargs
:
def __init__(self, **flags):
for flag, value in flags.iteritems():
setattr(self, flag, value)
或者@bgporter正确建议直接使用__dict__
(假设您没有定义__slots__属性):
def __init__(self, **flags):
self.__dict__.update(flags)
根据实际指定的“充足”数量,无论如何,将它们保存在单独的字典中可能会更容易:
def __init__(self, **flags):
self.flags = flags
我赞成后一种可能性,特别是如果该类还有其他“非旗帜”属性。
答案 1 :(得分:1)
你也可以:
def __init__(self, **kwargs):
for key in iter(kwargs):
settatr(self, key, kwargs.get(key))