我有一个通用的父类,还有一个子类,它使用特定类型来实现父类:
T = TypeVar("T")
class Parent(ABC, Generic[T]):
def get_impl_t(self):
pass
class Child(Parent[int]):
pass
我希望能够从父类获取子类的类型(请参见get_impl_t()
)。
由于类型抹消,我相当确定这是不可能的,除非进行一些hackery(inspect.getsource()
?)。如果没有类层次结构,这不起作用。
明显的解决方法是添加一个抽象的classmethod来获取类型,或者将参数添加到父类的构造函数中:
class Parent(ABC, Generic[T]):
def__init__(self, param_cls: Type[T]) -> None:
self.param_cls = param_cls
# or
@classmethod
@abstractmethod
def get_param_cls() -> Type[T]:
pass
这样做会增加一些维护开销,所以我想确保我没有漏掉任何东西。