Python 键入 - Return 通用协议作为自身

Python Typing - Return generic protocol as self

如果我有一个基础 class,它采用绑定到 typing.Protocol 的通用 T,我如何注释此 class 将可分配给传递的协议?

例如:

from typing import TypeVar, Generic, Protocol, Optional

T = TypeVar("T", bound = Protocol)

class Test(Generic[T]):
    something: Optional[str] = None

    def return_protocol(self) -> T:
        ...
        return self.__class__() # typing error, cannot assign self to T

我想结束 API 这样的事情:

class ProtoThatWrapsTest(Protocol):
    something: str
    ...


class Derived(Test[ProtoThatWrapsTest]):
    ...

t = Test()
t.something # Optional[str]

d = Derived().return_protocol()
d.something # str

好像是把type: ignore加上return self.__class__()一样简单。