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__()
一样简单。
如果我有一个基础 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__()
一样简单。