想理解一下 python 的数类型,但是现在搞不清 int 与 numbers.integral 到底什么关系?貌似前者是后者的一个子类,然而 inspect.getmro(int) 只显示 int 是 object 的子类而已,求大神解读?
isinstance(1,int)
Out[30]: True
isinstance(1,numbers.Integral)
Out[31]: True
inspect.getmro(int)
Out[32]: (int, object)
inspect.getmro(numbers.Integral)
Out[33]:
(numbers.Integral,
numbers.Rational,
numbers.Real,
numbers.Complex,
numbers.Number,
object)
issubclass(int,numbers.Integral)
Out[34]: True
numbers.Integral
是一个 ABC(Abstract Base Class),ABC 的子类不需要直接继承 ABC,而只要调用ABC.register(SubClassOfABC)
就能表示一种继承关系,并被issubclass()
、isinstance()
等方法识别。此外,ABC 不能直接实例化:使用
numbers.Integral
来判断整型可以识别numpy.int64
、Python 2 中的long
等int
以外的整数类型: