考虑这个人为设计的代码片段:
class Fooer():
def __init__(self, *args, **kwargs):
# do things
def foo(self) -> int:
# do more things
def foo(fooer, *args, **kwargs) -> int:
return x(*args, **kwargs).foo()
我想暗示 foo() 的 fooer 参数应该是 Fooer 的子类。它不是 Fooer 的实例,它是 Fooer 本身或其子类。我能想到的最好的是
def foo(fooer: type, *args, **kwargs) -> int
不够具体。
我怎样才能更好地暗示这一点?
请您参考如下方法:
根据 PEP-484 ( The type of class objects ),解决方案是使用 Type[C] 来指示 C 的子类,其中 C 是由您的基类限定的类型 var。
F = TypeVar('F', bound=Fooer)
def foo(fooer: Type[F], *args,**kwargs) -> int:
...
(公平地说,我不太明白这里使用 TypeVar 和使用 @e.s. 的回答中的类本身之间的区别,如 PEP-484 所示。)
