Python 3中内置模块中的numbers.Integral和int之间的关系是什么

时间:2010-11-26 01:23:37

标签: python python-3.x

我是Python的新手,我对于数字之间的关系有点混淆.Integral和int in builtins模块。

然后我的问题是:

  1. numbers.Integral和int之间有什么关系?它是否类似于Java中Integer和int之间的关系(Integer只是int的包装类)?

  2. 何时使用数字。整体? 由于mumbers模块中定义的类型都不能实例化,那么在什么样的场景中我们需要使用这些类型?

  3. 我知道只有一个案例可以使用积分:

     # check if x is a integer
     isinstance(x, Integral)
    

    从Python语言参考:

      

    ”    numbers.Number这些是由数字文字创建的,并返回为   算术运算符和结果   算术内置函数。

    但似乎算术运算符或算术内置函数不会返回数字类型。它仍然是内置类型。

    >>> a,b=123,5
    >>> c=a*b
    >>> print(c.__class__)
    <class 'int'>
    >>> d=abs(a)
    >>> print(d.__class__)
    <class 'int'>
    

    我正在使用Python 3.2a3。

1 个答案:

答案 0 :(得分:3)

因为你听起来像你知道Java:numbers.Integral定义了“接口”(它实际上是接口的泛化,称为“抽象基类”(ABC))用于整数。它不是您可以实例化的具体类型。

实现此接口的唯一内置类型是int

使用isinstance( obj, numbers.Integral),您可以测试obj是否实现了接口:

>>> isinstance(3, numbers.Integral)
True
>>> isinstance(3.0, numbers.Integral)
False
>>> isinstance(3+0j, numbers.Integral)
False

如果你想编写一个行为类似于整数的自定义类,你将从numbers.Integral继承 - 或者如果你想发明一种新类型的数字,你可以在那里注册。