
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.3 类型提示
编写代码时,Python的类型提示(type hint)功能可以给予一些帮助,以确保我们在输入方法名或类的属性时不出错。
以上一节创建的复数类为例:

假设我们写了一个以ComplexNum的实例作为实参的函数,来提取复数的虚数部分,但由于困倦,我们错误地写了以下内容:

你发现拼写错误了吗?由于我们对参数complex一无所知,IDE也无法给我们任何线索。以IDE的角度,imaginry是一个完全有效的属性名。直到我们运行该程序并传入一个复数,我们才会得到错误提示。
Python是一种动态类型语言:它在运行时会使用类型信息。例如,它会检查一个给定类型的对象在运行时是否响应一个方法,如果不响应,就会弹出一个错误提示:

不太幸运,对吧?在上例中,我们知道函数只接收ComplexNum类的实例,如果IDE提醒我们该属性输入错误,那就好了。事实上,使用类型提示可以做到这一点。
在定义函数或方法时,将类型提示放在参数名后面,用冒号分隔:


如你所见,IDE向我们发出信号,ComplexNum类没有属性“imaginry”。
除了使用类定义的类型外,我们还可以使用Python的内置类型作为类型提示。例如,以两个浮点数作为输入的复数初始值可以这样写:

现在,如果我们试图用错误的参数类型对类进行实例化,IDE会警告我们:

我们可以使用float表示浮点数,int表示整数,str表示字符串。
这些类型提示在开发过程中帮助我们,但在运行时没有影响。我们将在本书的许多地方使用类型提示:添加它们不需要多少时间,但安全是切实的。