为什么 int 是 number.Number 的子类?

Why int is subclass of number.Number?

让我们看下面的代码:

>>> int.__mro__
(<class 'int'>, <class 'object'>)

>>> import numbers
>>> issubclass(int, numbers.Number)
True

我们可以看到__mro__中没有Number,也就是说int没有继承自Number,但是为什么intint的子类Number?

Number 是抽象基础 class (ABC)。普通类型可以注册为 ABC 的子class。

参见https://docs.python.org/3/library/abc.html#abc.ABCMeta.register

register(subclass)

Register subclass as a “virtual subclass” of this ABC.

numbers 模块包含行

Integral.register(int)

IntegralRational 的子 class < Real < Complex < Number.

因此 intNumber 的虚拟子 class。