我确定我在这里遗漏了一些明显的东西,但是为什么以下脚本实际上起作用?

import enum
import typing

class States(enum.Enum):
    a = 1
    b = 2

states = typing.NewType('states', States)

def f(x: states) -> states:
    return x

print(
    f(States.b),
    f(3)
)


据我了解,它应该在调用f(3)时失败,但是不会失败。有人可以阐明这种行为吗?

最佳答案

Python本身不执行任何检查。这是在PEP 484的"Non- Goals" section中指定的。执行时(即在运行时),Python会完全忽略您提供的注释,并像平时一样动态地评估语句。

如果需要类型检查,则应自己执行。当前,这可以通过静态类型检查工具(例如mypy)执行。

关于python - Python类型检查无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40090600/

10-12 18:41