【发布时间】: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。 -
@TheLazyScripter 在 Python 中,这就是 global 所暗示的
-
暗示与否,它没有成为全球性的。至于问题,唯一的区别是如果需要,您如何访问或更改该值。
-
@TheLazyScripter 我对这些定义不太熟悉,因为我不是来自计算机科学背景。如果方法 1 中的 'var' 不是全局变量,您能否举个例子说明如何在 python 中定义全局变量?
标签: python class oop global-variables class-variables