我想写一个以(variableName, value
)的形式接受几个变量的类。但是,变量名仅在运行时已知,并且args的数量在运行时也是已知的。在我的班上,我有一个对象,我想设置那些参数。所以我需要循环遍历所有变量和setattribute,如下所示。
setattr (self.obj, variableName, value)
self.obj.make()
答案 0 :(得分:5)
你可以这样做:
class C(object):
def __init__(self, **kwargs):
for (variableName, value) in kwargs.items():
# setattr(), etc.
您可以使用C(x=3, y=123,…)
调用。
如果你真的想使用[variableName,value,...]参数列表,你可以这样做:
class C(object):
def __init__(self, *args):
arg_iter = iter(args)
for (variableName, value) in zip(arg_iter, arg_iter):
# setattr(), etc.
您使用C('x', 3, 'y', 123,…)
调用的。 zip()
技巧按对将参数列表(args
)的参数分组。您可能希望添加对传递的参数数量的检查(C(3)
被上面的代码接受,因为zip()
不介意使用两个不同长度的序列。)