我创建了一个 API,其中许多功能都在一个基类中实现,多个子类继承自该基类。当通过子类调用时,基类的方法将始终返回与子类相同类型的对象。我正在努力弄清楚如何正确键入提示不同方法的输出
作为一个简单的例子,假设我有以下类:
from copy import deepcopy
class BaseClass:
def __init__(self, a: str, b: str) -> None:
self.a = a
self.b = b
def copy(self):
return deepcopy(self)
class SubClass(BaseClass):
def __init__(self, x: float, a: str, b: str) -> None:
super().__init__(a, b)
self.x = x
我应该如何键入提示 BaseClass.copy()
以便清楚地知道如果从 SubClass
调用它会返回一个 SubClass
对象> 对象? (对于从 BaseClass
派生的任何其他类,等等)。
最佳答案
您可以使用 TypeVar
:
from copy import deepcopy
from typing import TypeVar
T = TypeVar("T")
class BaseClass:
def __init__(self, a: str, b: str) -> None:
self.a = a
self.b = b
def copy(self: T) -> T:
return deepcopy(self)
虽然T
本身声明没有限制,但是通过self
的注解来约束,所以copy
会返回一个对象与其对应实例相同的类型。
关于python - 在父类中为返回任何子类对象的方法键入提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68082661/