Python 论优化班级创建
假设我必须创建一个有很多变量的类。我可以使用for循环将每个设置为其自身吗? 即: 显然,上面的代码不起作用,但有可能做到这一点吗?有更好的方法吗? 而不是打字Python 论优化班级创建,python,optimization,python-2.7,Python,Optimization,Python 2.7,假设我必须创建一个有很多变量的类。我可以使用for循环将每个设置为其自身吗? 即: 显然,上面的代码不起作用,但有可能做到这一点吗?有更好的方法吗? 而不是打字 self.var1 = var1 self.var2 = var2 等等?您可以存储属性名称列表 In [1]: class New(object): ...: names = ['foo', 'bar'] ...: def __init__(self, *args): ...: for k
self.var1 = var1
self.var2 = var2
等等?您可以存储属性名称列表
In [1]: class New(object):
...: names = ['foo', 'bar']
...: def __init__(self, *args):
...: for k, v in zip(New.names, args):
...: setattr(self, k, v)
...:
In [2]: a = New(1, 2)
In [3]: a.foo
Out[3]: 1
或使用关键字参数:
In [1]: class New(object):
...: def __init__(self, **kwargs):
...: for k, v in kwargs.iteritems():
...: setattr(self, k, v)
...:
In [2]: a = New(foo=1, bar=2)
In [3]: a.foo
Out[3]: 1
有很多方法,是的,但每当我想要这样的东西时,我要么做大量的元编程(因此没有固定的名称列表,我几乎没有选择),要么类变得太复杂。想想看。也许你的类实际上只是一个容器,也许是一个集合。namedtuple。嘿,delnan,我意识到有更好的/不同的方法可以做到这一点,我只是想更好地理解Python。我感谢你的意见。
In [1]: class New(object):
...: def __init__(self, **kwargs):
...: for k, v in kwargs.iteritems():
...: setattr(self, k, v)
...:
In [2]: a = New(foo=1, bar=2)
In [3]: a.foo
Out[3]: 1