如何注释 class 方法 returns class 的一个实例

How to annotate that a classmethod returns an instance of that class

使用 PEP 484,有没有办法注释 class 方法 returns class 的一个实例?

例如

@dataclass
class Bar:

    foo: str

    @classmethod
    def new_from_foo(cls, foo) -> Bar
        ...

    @classmethod
    def new_from_foo(cls, foo) -> cls

诀窍是使用 TypeVarcls 参数连接到 return 注释:

from typing import TypeVar, Type

T = TypeVar('T')

class Bar:
    @classmethod
    def new_from_foo(cls: Type[T], foo) -> T:
        ...