我有一个配置字典,我用dunder init调用层次结构中的值加载它,每个调用都实例化配置的一部分。试图添加打字到这个我收到了一个奇怪的行为(或可能我做错了什么)。我得到的行为与字典给出的类型一致,这些类型只在第一次声明中插入到字典中,更新扩展和添加键似乎不会改变字典在访问时声明的类型,这是我为说明问题而编写的一个简单代码:
import re
def foo(a: int = 1, b: str = "b"):
d = {"a": a}
d.update({"b": b})
print(re.findall(d["b"], "baba"))
foo()
课程代码工作和输出
['b', 'b']
(无意双关语)但是我的小妖精发出了两个警告:
-
在更新行:
Unexpected type(s):<br>(Dict[str, str])<br>Possible types:<br>(Mapping[str, int])<br>(Iterable[Tuple[str, int]])
-
在Finditer线上:
Expected type 'Union[bytes, str, __Regex]', got 'int' instead
我的问题是,我对这个原因的分析是真的吗(dict将其类型设置为实例化)?有没有一种蟒蛇式的方法来修复这些警告?