为什么 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
,但是为什么int
是int
的子类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)
Integral
是 Rational
的子 class < Real
< Complex
< Number
.
因此 int
是 Number
的虚拟子 class。
让我们看下面的代码:
>>> int.__mro__
(<class 'int'>, <class 'object'>)
>>> import numbers
>>> issubclass(int, numbers.Number)
True
我们可以看到__mro__
中没有Number
,也就是说int
没有继承自Number
,但是为什么int
是int
的子类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)
Integral
是 Rational
的子 class < Real
< Complex
< Number
.
因此 int
是 Number
的虚拟子 class。