python定义类变量与全局变量



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

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

# 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">

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

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

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

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

这取决于您的用例。

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

最新更新