Python 如何在静态方法中获取对 class 的引用
Python how to get reference to class in static method
如何在静态方法中获取对 class 的引用?
我有以下代码:
class A:
def __init__(self, *args):
...
@staticmethod
def load_from_file(file):
args = load_args_from_file(file)
return A(*args)
class B(A):
...
b = B.load_from_file("file.txt")
但我想要 B.load_from_file return 类型 B 的对象,而不是 A。
我知道如果 load_from_file 不是我可以做的静态方法
def load_from_file(self, file):
args = load_args_from_file(file)
return type(self)__init__(*args)
这就是 classmethod
对 的 ;它们与 staticmethod
相似,因为它们不依赖于实例信息,但它们 做 提供有关 class[=28 的信息=] 通过隐式提供它作为第一个参数来调用它。只需将您的备用构造函数更改为:
@classmethod # class, not static method
def load_from_file(cls, file): # Receives reference to class it was invoked on
args = load_args_from_file(file)
return cls(*args) # Use reference to class to construct the result
当 B.load_from_file
被调用时,cls
将是 B
,即使该方法是在 A
上定义的,确保您构造正确的 class .
一般来说,每当您发现自己正在编写这样的备用构造函数时,您总是想要一个classmethod
来正确启用继承。
如何在静态方法中获取对 class 的引用?
我有以下代码:
class A:
def __init__(self, *args):
...
@staticmethod
def load_from_file(file):
args = load_args_from_file(file)
return A(*args)
class B(A):
...
b = B.load_from_file("file.txt")
但我想要 B.load_from_file return 类型 B 的对象,而不是 A。 我知道如果 load_from_file 不是我可以做的静态方法
def load_from_file(self, file):
args = load_args_from_file(file)
return type(self)__init__(*args)
这就是 classmethod
对 的 ;它们与 staticmethod
相似,因为它们不依赖于实例信息,但它们 做 提供有关 class[=28 的信息=] 通过隐式提供它作为第一个参数来调用它。只需将您的备用构造函数更改为:
@classmethod # class, not static method
def load_from_file(cls, file): # Receives reference to class it was invoked on
args = load_args_from_file(file)
return cls(*args) # Use reference to class to construct the result
当 B.load_from_file
被调用时,cls
将是 B
,即使该方法是在 A
上定义的,确保您构造正确的 class .
一般来说,每当您发现自己正在编写这样的备用构造函数时,您总是想要一个classmethod
来正确启用继承。