我有一个实现MutableMapping的类
V = TypeVar('V')
K = TypeVar('K')
class MM(MutableMapping[K, V]):
def __getitem__(self, k):
return 1
def __setitem__(self, k, v):
pass
def __delitem__(self, k):
pass
def __iter__(self):
return iter(())
def __len__(self):
return 0
这样使用:
test: MM[str, int] = MM()
test["a"] = 1
var = test["a"]
变量var应该是int类型(根据类型提示),但是pycharm告诉我不能推断其类型。
这是pycharm中的错误还是我做错了什么?
另一令人惊讶的是,当我将类定义更改为
时MM(MutableMapping[str, V])
Pycharm表示var的类型是字符串。我想念什么?
答案 0 :(得分:1)
您可能需要为每个方法添加类型提示。例如:
from typing import MutableMapping, TypeVar, Iterator
K = TypeVar('K')
V = TypeVar('V')
class MM(MutableMapping[K, V]):
def __getitem__(self, k: K) -> V:
return ???
def __setitem__(self, k: K, v: V) -> None:
pass
def __delitem__(self, k: K) -> None:
pass
def __iter__(self) -> Iterator[K]:
return iter(())
def __len__(self) -> int:
return 0
虽然我不是100%Pycharm的推理引擎如何工作,但对我来说似乎很合理,如果您不对函数进行类型化,则默认情况是假设您打算对函数进行动态类型化,并且params /返回值的类型为“任何”。