我建议使用的组合
TypeVar,以指示您的
self.o值可以是任何任意类型,并
Type通过以下方式:
from typing import TypeVar, TypeT = TypeVar('T')class MyObj: def __init__(self, o: T) -> None: self.o = o def get_obj_class(self) -> Type[T]: return type(self.o)def accept_int_class(x: Type[int]) -> None: passi = MyObj(3)foo = i.get_obj_class()accept_int_class(foo) # Passess = MyObj("foo")bar = s.get_obj_class()accept_int_class(bar) # Fails如果您希望的类型
o更具动态性,则可以显式或隐式为其指定类型
Any。
关于后一个问题,您可以:
def f(cls: Type[T]) -> T: return cls()
请注意,实例化类时需要小心-我不记得Pycharm在这里做什么,但是我知道mypy当前不会检查以确保您
__init__正确/正确地调用了函数。 。
(这是因为T可以是任何东西,但无法暗示构造函数的外观,因此执行此检查最终将变得不可能或非常困难。)



