【问题标题】:python define class variable vs global variablepython定义类变量与全局变量
【发布时间】:2021-03-13 01:11:12
【问题描述】:

我遇到了一个用例,我必须在静态方法中定义所有逻辑/规则,以便由类方法调用/使用。而在静态方法内部,需要访问一些静态变量作为比较的阈值。在我的用例中,变量是一个常量,应该是硬编码的,不应更改或覆盖。

有两种方法可以做到这一点(全局变量与类变量),我编写了一个模拟示例来展示这两种方式。我的问题是,这两种方法有什么优点/缺点吗?更一般地说,当您需要定义静态变量时,在将其定义为全局变量或类变量之前需要考虑哪些事项?

# method 1
var = 'hi'
class Test:
    @staticmethod
    def staticfn():
        return var
      
    def printstatic(self):
        print(self.staticfn())

test = Test()
test.printstatic()

# method 2

class Test:
    var = 'hi'
    @staticmethod
    def staticfn():
        return Test.var
      
    def printstatic(self):
        print(self.staticfn())

test = Test()
test.printstatic()

两种方法都可以打印字符串'hi'

【问题讨论】:

  • var 不是global,而是当前模块的local
  • link link 如果我错了,请纠正我,我认为两个网站都在模块级别定义了全局变量。我想这取决于你定义它的方式(上下文驱动?)。但我想问这个问题的真正问题是方法 1 或方法 2 是否总是比另一种更好,如果不是,需要考虑哪些条件或事情?
  • @TheLazyScripter 在 Python 中,这就是 global 所暗示的
  • 暗示与否,它没有成为全球性的。至于问题,唯一的区别是如果需要,您如何访问或更改该值。
  • @TheLazyScripter 我对这些定义不太熟悉,因为我不是来自计算机科学背景。如果方法 1 中的 'var' 不是全局变量,您能否举个例子说明如何在 python 中定义全局变量?

标签: python class oop global-variables class-variables


【解决方案1】:

当静态变量仅与特定类本身相关时,通常会使用它们。

如果它们代表该类的每个实例的某些公共属性,我们将使用这些变量。

如果在模块中的其他地方需要它,那么在类之外定义变量就更合适了。这可以做到,但也承担了共享状态的所有风险。

我认为我们不能像那样决定哪种方法好。

这取决于您的用例。

请注意,您还可以选择在实例化时将阈值作为参数传递给 __init__ 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2015-08-19
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多