Python类型检查不如预期工作。

4

我确信我在这里漏掉了一些显而易见的东西,但为什么下面的脚本实际上可以运行?

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)时出错,但实际上没有。有人能解释一下这种行为吗?
1个回答

4
Python本身不执行任何检查。这在PEP 484的"非目标" section中有明确规定。在执行时(即运行时),Python完全忽略您提供的注释,并像通常一样动态地评估您的语句。
如果需要类型检查,应该自己执行。目前可以通过静态类型检查工具mypy执行。

1
据我记得,曾经有人担心Python会变成可选静态语言。PEP 484(以及因此而来的PEP 526)的作者们已经尽可能清楚地表明,Python不会对您提供的类型做任何处理 :-) - Dimitris Fasarakis Hilliard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接