【问题标题】:Automatic Redefining a global variable in the class自动重新定义类中的全局变量
【发布时间】:2016-01-09 02:20:36
【问题描述】:

我想要这样的东西:

>>> x = 0
>>> c = SomeClass(x)
>>> c.x
0
>>> x = 1
>>> c.x
1

或者

>>> x = 0
>>> c = SomeClass(x)
>>> c.x
0
>>> x = 1
>>> c.x
0
>>> c.update()
>>> c.x
1

我想这不是一种传统的方法,我知道你可以制作 def update(self,x): self.x = xc.x = x 但这不是我想要的方式,我只是想知道是否有办法实现它。

【问题讨论】:

  • c.x = 1 有什么问题?
  • @ TigerhawkT3,没什么,正如我在上面写的那样,我只是想知道是否有办法得到它。
  • 如果您没有理由避免使用正确的语法和样式,请不要这样做。你只会弄得一团糟,没有任何用处,没有人会理解你的代码(包括你自己,几周后)。
  • @TigerhawkT3 当然,这只是一个愚蠢的问题,我标记了它,请回答\批评家顺便说一句

标签: python python-2.7 class variables


【解决方案1】:

你可以使用一个属性:

class SomeClass(object):

    @property
    def x(self):
        return x

【讨论】:

  • 该函数没有本地x,因此将生成NameError。它也与将全局变量转换为类或实例变量无关。
  • @TigerhawkT3 这取决于x 的定义位置。如果它在文件中定义为类,它将起作用。不是,必须修改return 行。如果有人使用全局变量,那么所有内容都在一个文件中的可能性非常高。
  • 我明白了。但是,它仍然只是指向全局变量,它只需要x=1 和对x 的引用。
  • @TigerhawkT3 好吧,我告诉他怎么做,你告诉他这可能不聪明。所以他得到了所有的信息来做出决定。
【解决方案2】:

重写 SomeClass 中的 getattributesetattr(self, attr, value) 函数,以获取和设置其中的 x 值。

【讨论】:

    猜你喜欢
    • 2015-11-15
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 2021-03-13
    相关资源
    最近更新 更多