在程序中会见到name = NewType('name', tp)
形式的代码,如:
NodeId = NewType('NodeId', int)
其中,NewType
用来创建自定义数据类型;NodeId
代表新类型;int
代表原始类型。静态类型检查器会把新类型NodeId看做原始类型int的一个子类,即NodeId其实也是int类型。
再来看一下NewType是怎么实现的:
# NewType实现代码
def NewType(name, tp):
def new_type(x):
return x
new_type.__name__ = name
new_type.__supertype__ = tp
return new_type
现在我们可以知道,开头举的例子中NewType('NodeId', int)
会返回一个new_type()函数,该函数的功能是返回所传入参数原本的值。这有什么作用呢?它可以实现类型检查的功能,即检查传入的参数是否是NodeId类型(int类型)。
需要注意的是,前面提到静态类型检查器会把新类型看做原始类型的一个子类,其实并没有真的创建新类型,新类型只是运行时的标识函数,并不是实际类型。