【问题标题】:On optimizing class creation关于优化类创建
【发布时间】:2013-05-09 06:02:16
【问题描述】:

假设我必须创建一个包含很多变量的类。我可以使用 for 循环将每个设置为它自己吗? 那就是:

class New(object):
    def __init__(self, var1, var2, var3, var4, var5, var6):
        for x in [var1, var2, var3, var4, var5, var6]:
            self.x = x

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

self.var1 = var1
self.var2 = var2

等等?

【问题讨论】:

  • 有办法,是的,但每当我想要这样的东西时,我要么在做繁重的元编程(因此没有固定的名称列表,我别无选择),或者是一个类变得太复杂了。想想看。也许你的类真的只是一个容器,也许是一个collections.namedtuple
  • 嘿,delnan,我意识到有更好/不同的方法可以做到这一点,我只是想更好地理解 Python。感谢您的意见。

标签: python optimization python-2.7


【解决方案1】:

您可以存储属性名称列表...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多