【发布时间】:2021-07-18 18:16:16
【问题描述】:
我想创建一个通用容器类,其中类型的边界基于实现协议,如下所示:
class Nameable(Protocol):
def name(self) -> str:
...
T = TypeVar("T", bound=Nameable)
class NameableList(Generic[T]):
...
class Foo:
_name: str
def name(self) -> str:
return self._name
x = NameableList[Foo]
在这样做时,mypy 坚持 Foo 必须是 Nameable 的子类型——这不是我想要的(Foo 只是实现了 Nameable 协议)
任何帮助将不胜感激。
【问题讨论】:
-
我刚刚意识到边界强制执行子类型要求。这仍然使我最初的问题保持活力 - 我们如何对泛型类型强制执行协议约束?
-
我在您的代码中没有看到任何 mypy 错误。
标签: python python-3.x mypy structural-typing