在 python 中使用没有自身的当前 class (静态方法继承)
use current class without self in python (static method inherit)
我想知道是否有办法让静态方法在当前 class 中使用变量。这样,我可以通过更改其中的成员来更改 class 操作。
class A:
var = 0
lst = [100, 200, 300]
@staticmethod
def static_function():
print(A.var, A.lst) # need to indicate current class rather than specific one
def class_function(self):
print(self.__class__.var, self.__class__.lst)
class B(A):
var = 9
lst = [999, 999, 999]
if __name__ == '__main__':
B.static_function() # 0 [100, 200, 300]
B().class_function() # 9 [999, 999, 999]
B.static_function() # what I want: 9 [999, 999, 999]
您要找的是 class 方法,其语法为:
class A:
@classmethod
def class_function(cls):
print(cls.var, cls.lst)
使用这个装饰器将 class 自身传递给函数,cls
变量不是 class 实例。这会产生您正在寻找的结果
为此,有 @classmethod
。
每个 classmethod
都有一个接收 class 的隐式参数,通常简称为 cls
.
您的方法可以转换为以下方式:
@classmethod
def static_function(cls):
print(cls.var, cls.lst)
我想知道是否有办法让静态方法在当前 class 中使用变量。这样,我可以通过更改其中的成员来更改 class 操作。
class A:
var = 0
lst = [100, 200, 300]
@staticmethod
def static_function():
print(A.var, A.lst) # need to indicate current class rather than specific one
def class_function(self):
print(self.__class__.var, self.__class__.lst)
class B(A):
var = 9
lst = [999, 999, 999]
if __name__ == '__main__':
B.static_function() # 0 [100, 200, 300]
B().class_function() # 9 [999, 999, 999]
B.static_function() # what I want: 9 [999, 999, 999]
您要找的是 class 方法,其语法为:
class A:
@classmethod
def class_function(cls):
print(cls.var, cls.lst)
使用这个装饰器将 class 自身传递给函数,cls
变量不是 class 实例。这会产生您正在寻找的结果
为此,有 @classmethod
。
每个 classmethod
都有一个接收 class 的隐式参数,通常简称为 cls
.
您的方法可以转换为以下方式:
@classmethod
def static_function(cls):
print(cls.var, cls.lst)