Python如何在静态方法中获取类的引用
Python如何在静态方法中获取类的引用
这个问题已经有了答案:
如何在静态方法中获取类的引用?
我有以下代码:
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返回B类型的对象,而不是A类型的对象。
我知道如果load_from_file不是一个静态方法,我可以这样做:
def load_from_file(self, file): args = load_args_from_file(file) return type(self)__init__(*args)
admin 更改状态以发布 2023年5月23日
这就是classmethod
的作用;它们与staticmethod
类似,不依赖于实例信息,但它们提供有关调用它的类的信息,通过将其隐式地作为第一个参数提供。只需将您的替代构造函数更改为:
@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
上定义,确保您构造正确的类。
通常情况下,每当您发现自己编写这样的替代构造函数时,您都需要一个classmethod
来正确启用继承。