Python中的类型注释并不意味着类型强制。任何涉及运行时静态类型依赖的东西都意味着非常基本的更改,以至于继续调用结果语言“Python”都没有意义。
注意,Python的动态特性确实允许使用纯Python代码构建一个外部工具来执行运行时类型检查。它会使程序运行(非常)缓慢,但可能适合某些测试类别。
可以肯定的是,Python语言的一个基本原理是,一切都是一个对象,并且您可以在运行时尝试对对象执行任何操作。如果对象没有符合尝试的操作的接口,它将在运行时失败。
本质上是静态类型的语言以不同的方式工作:当在运行时尝试时,操作必须在对象上可用。在编译步骤中,编译器会在所有地方为适当的对象创建空格和槽,如果输入不一致,则会中断编译。
Python的typechecking允许任何数量的工具做到这一点:在实际运行应用程序之前的某一步中断并发出警告(但独立于编译本身)。但是,语言的性质不能改变为实际要求对象在运行时遵守,而且在编译步骤本身执行类型和中断操作都是人为的。
尽管如此,我们可以预期,Python的未来版本可能会在Python运行时本身进行编译时类型检查,这很可能是通过可选的命令行开关进行的。(我不认为它会是默认的——至少不会破坏构建——也许它可以默认为发出警告)
因此,Python不需要在运行时进行静态类型检查,因为它将不再是Python。但至少有一种语言同时使用了动态对象和静态类型——Cython语言,它实际上是一个Python超集。我们应该期望Cython将新的类型暗示语法合并为很快声明的实际类型。(目前,它对可选的静态类型变量使用不同的语法)