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来正确启用继承。