是否有从python中的函数参数创建成员变量的简写?

时间:2014-08-11 15:52:44

标签: python attributes

假设我在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)

实际上,我更喜欢后者,因为我不希望将“厨房水槽”分配给自己。

感谢。

2 个答案:

答案 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))