首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中int和numbers.Integral的区别

Python中int和numbers.Integral的区别
EN

Stack Overflow用户
提问于 2011-11-20 17:36:09
回答 4查看 9.7K关注 0票数 23

我试图对Python的数据模型有更深入的了解,但我并不完全理解以下代码:

代码语言:javascript
复制
>>> x = 1

>>> isinstance(x,int)
True

>>> isinstance(x,numbers.Integral)
True

>>> inspect.getmro(int)
(<type 'int'>, <type 'object'>)

>>> inspect.getmro(numbers.Integral)
(<class 'numbers.Integral'>, <class 'numbers.Rational'>, <class 'numbers.Real'>,
 <class 'numbers.Complex'>, <class 'numbers.Number'>, <type 'object'>)

基于以上所述,intnumber.Integral似乎不属于同一层次结构。

从Python引用(2.6.6)中我看到

numbers.Integral --它们代表整数的数学集合(正负)中的元素。

intnumbers.Integral有什么区别?这与我在上面的输出中看到的type intclass numbers.Integral有关吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-20 17:45:17

numbers定义了抽象类的层次结构,这些抽象类定义了数字类型上可能的操作。见佩普3141intIntegral的区别在于,int是一种支持Integral定义的所有操作的具体类型。

票数 11
EN

Stack Overflow用户

发布于 2015-08-17 16:42:37

允许我添加两件事:

代码语言:javascript
复制
isinstance(x,numbers.Integral)

还包括long

代码语言:javascript
复制
isinstance(x, int)

不会的。numbers.Integral测试将更接近于

代码语言:javascript
复制
isinstance(x, (int, long))

在Python2中(Python3永久地杀死了long )。

我更喜欢用numbers.Integral进行测试,因为如果您从int (或long)派生,那么isinstance(y, numbers.Integral)仍然是True

票数 5
EN

Stack Overflow用户

发布于 2019-11-14 14:55:51

int 已注册 as a 虚拟子类 of numbers.Integral.

代码语言:javascript
复制
# numbers.py:380 (CPython 3.8)
Integral.register(int)

numbers.Integral是整数必须提供的抽象定义。int是整数的具体实现。

isinstanceissubclass函数不限于继承。例如,它们可以表示结构类型关系 (如collections.abc.Iterable )。

代码语言:javascript
复制
>>> class MyIterable:
...     def __iter__(self): ...
...
>>> issubclass(MyIterable, collections.abc.Iterable)
True

事实上,isinstanceissubclass都可以是每种类型都有更改。标准库使用它来定义抽象基类(ABC)支持具体子类(通过继承)和虚拟子类(通过cls.register(subclass))。

虚拟子类通过继承与其ABC无关--其方法解析顺序因此不使用ABC。具体来说,int不继承numbers.Integral的任何方法。但是,它确实独立地实现了numbers.Integral所需的所有公共方法和操作--从而满足了numbers.Integral定义。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8203336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档