- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下代码:
from typing import Any, Mapping, TypedDict
class MyDict(TypedDict):
foo: bool
def my_func_any(a: Mapping[str, Any]) -> None:
print(a)
def my_func_bool(a: Mapping[str, bool]) -> None:
print(a)
d: MyDict = {
'foo': True
}
my_func_any(d)
my_func_bool(d) # line 21
mypy==0.761
检查时会出现以下错误:
test.py:21: error: Argument 1 to "my_func_bool" has incompatible type "MyDict"; expected "Mapping[str, bool]"
my_func_any(d)
和
my_func_bool(d)
没关系,但后者是一个错误。这是一个错误还是我错过了什么?
最佳答案
引用 PEP 589 :
Type Consistency
First, any
TypedDict
type is consistent withMapping[str, object]
.[...]
A
TypedDict
with allint
values is not consistent withMapping[str, int]
, since there may be additional non-int values not visible through the type, due to structural subtyping. These can be accessed using thevalues()
anditems()
methods inMapping
, for example. Example:class A(TypedDict):
x: int
class B(TypedDict):
x: int
y: str
def sum_values(m: Mapping[str, int]) -> int:
n = 0
for v in m.values():
n += v # Runtime error
return n
def f(a: A) -> None:
sum_values(a) # Error: 'A' incompatible with Mapping[str, int]
b: B = {'x': 0, 'y': 'foo'}
f(b)
关于python - 为什么 TypedDict 与匹配的 Mapping 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60304154/
foo.py : kwargs = {"a": 1, "b": "c"} def consume(*, a: int, b: str) -> None: pass consume(**kwar
如果我在字典中有一个带有无效标识符的键,例如 A(2) .如何创建 TypedDict与这个领域? 例如 from typing import TypedDict class RandomAlphab
我正在寻找一个 Python (3.8+) 函数: 输入:TypedDict的键值 输出: 返回值(简单) 是否有适当的类型提示(我被卡住的地方) 这里有一个代码示例来帮助解释: from typin
Python 3.8 引入 TypedDict应该用于输入 dict 对象的类: from typing import TypedDict class MyDict(TypedDict): n
我希望能够编写一个函数来检查字典是否符合我的 TypedDict,但是我无法获得正确的泛型类型。所以结果函数应该是这样的: T = typing.Generic('T', bound=...) # T
以下代码: class A(TypedDict): abc: str class B(TypedDict): xyz: str def func(dict_class: Union[t
我有一堆@dataclass es 和一堆对应的 TypedDict s,我想促进它们之间的平滑和类型检查转换。 例如,考虑 from dataclasses import dataclass fro
我正在尝试创建一个 TypedDict 子类,如果某个键会导致 KeyError 并且该键是TypedDict 的注释为 Optional。我意识到这不太可能,因为 TypedDict 除了定义注释外
考虑以下代码: from typing import Any, Mapping, TypedDict class MyDict(TypedDict): foo: bool def my_fun
我在 Python 3.8+ Django/Rest-Framework 环境中工作,在新代码中强制执行类型,但建立在许多未类型化的遗留代码和数据上。我们广泛使用 TypedDicts 来确保我们生成
我在 attrs 数据类 Example 中有一个 TypedDict DictWithOnlyX,其中 mypy 提示从 my 的 getdict() 方法返回的类型类,即使声明了返回类型: fro
在我看来,NamedTuple 和 TypedDict 非常相似,Python 开发人员自己也认识到这一点。 Concerning the PEP, I would rather add a comm
我想将 TypedDict 与 Union 结合起来。这样函数就可以返回 A 或 B。 Mypy 能够直接正确检测 TypedDict 返回类型。但是当 TypedDict 嵌套在 Union 中时,
我是一名优秀的程序员,十分优秀!