Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 论优化班级创建_Python_Optimization_Python 2.7 - Fatal编程技术网

Python 论优化班级创建

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

假设我必须创建一个有很多变量的类。我可以使用for循环将每个设置为其自身吗? 即:

显然,上面的代码不起作用,但有可能做到这一点吗?有更好的方法吗? 而不是打字

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