我想实现一个通用字典,将文本键映射到MyConstrainingClass
的类或继承类,因此我声明了一个TypeVar
和MyDict
类,如下所示:
from typing import Mapping, TypeVar
T = TypeVar("T", MyConstrainingClass)
class MyDict(Mapping[str, T]):
当我接受PyCharm的建议来实现抽象基类方法时,它会生成以下输出:
class MyList(Mapping[str, T]):
def __getitem__(self, k: _KT) -> _VT_co:
pass
def __iter__(self) -> Iterator[_T_co]:
pass
def __len__(self) -> int:
pass
_KT
、_VT_co
、_T_co
泛型类型变量是什么?我自己没有定义它们,它似乎是从超类中提取出来的。
显然他们描述了"KeyType","ValueType协变“和”类型(?)协变“,但是我完全不知道我是否必须在我的例子中创建这样的泛型参数,或者如何定义它们。
发布于 2017-07-02 21:44:50
PyCharm从Mapping
declaration in the typing
module (或其自己的内部文件版本)中获取它们:
class Mapping(Collection[KT], Generic[KT, VT_co],
extra=collections_abc.Mapping):
__slots__ = ()
(从基类继承的T_co
协变,从Iterable
继承)。
我会用你更具体的版本来代替这些建议:
class MyList(Mapping[str, T]):
def __getitem__(self, k: str) -> T:
pass
def __iter__(self) -> Iterator[str]:
pass
def __len__(self) -> int:
pass
https://stackoverflow.com/questions/44875428
复制