Python 类型检查未按预期工作
Python type checking not working as expected
我确定我在这里遗漏了一些明显的东西,但为什么下面的脚本实际上有效?
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
.
等静态类型检查工具来执行
我确定我在这里遗漏了一些明显的东西,但为什么下面的脚本实际上有效?
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
.