【问题标题】:Create class instance variables using a locals()['some_string'] like approach使用类似 locals()['some_string'] 的方法创建类实例变量
【发布时间】:2014-07-06 04:13:59
【问题描述】:

有时我需要使用一个变量创建带有后缀的新变量,我可以使用类似的东西:

Number=5
locals()['First'+str(Number)]=5

导致变量First5 = 5。

如何在类实例中做同样的事情?

class foo:
    def appender(self,bar):
        for i in range(bar):
            self.locals()['Number'+str(i)]=i
#-----
qq=foo()
qq.appender(3) #issues...

我想创建 qq.Number0、qq.Number1 和 qq.Number2,但它告诉我 foo 没有本地实例。如何连接字符串以在我的实例中创建新变量? 谢谢!

【问题讨论】:

  • 您在寻找foo.__dict__,还是self.__dict__
  • 我想我正在寻找 self.__dict__,因为我只希望它与实例相关联。每个实例可能有不同数量的'bar',但也许我只是感到困惑......
  • 我想我明白了。您想动态设置类的属性,以便名称也从值创建,对吧?

标签: python string class variables concatenation


【解决方案1】:

要动态设置类实例的属性,您可以使用内部方法__setattr__

class Foo(object):
    def appender(self, bar):
        self.__setattr__('Number' + str(bar), bar)

应该给你的:

>>>> foo = Foo()
>>>> foo.appender(1)
>>>> foo.Number1
1

【讨论】:

  • 谢谢 MrAlias - 我认为这是正确的道路,尽管 Python 告诉我 foo 没有属性 'setattr'。
  • 下划线很重要:setattr != __setattr__
  • 还要确保在 python2 中使用 new 类样式(即class foo(object):
  • 就是这样!我用 foo() 而不是 foo(object) 创建我的类。现在 settattr 就在那里。谢谢!
  • 是的,这确实看起来您正在使用old class type
猜你喜欢
  • 2012-08-30
  • 2017-02-15
  • 1970-01-01
  • 2017-04-15
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多