我想实现一个通用字典,将文本键映射到 MyConstrainingClass
或继承自 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
泛型类型变量是什么?我自己没有在任何地方定义它们,它似乎是从父类(super class)中获取它们的。
显然他们描述了“KeyType”,“ValueType协变”和“Type(?)协变”,但我不知道是否必须在我的情况下创建这样的通用参数或如何定义它们。
最佳答案
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
关于python - 这些奇特的 TypeVar 的 PyCharm 生成了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44875428/