4.5 数值类型

    当我们需要创建新的数值类型或者扩展现有的数值类型时,需要用到numbers模块。这个模块包含了Python内置数值类型的抽象定义。从最简单的数值类型到最复杂的,这些类型共同构成一个庞大的层次结构。在这个例子中,简单和复杂指的是可用方法的集合。

    numbers.Number 抽象基类定义了所有数值以及类数值类型,我们使用下面的代码来介绍这个类。

    >>> import numbers
    >>>isinstance( 42, numbers.Number )
    True
    >>> 355/113
    3.1415929203539825
    >>>isinstance( 355/113, numbers.Number )
    True

    很明显,整数和浮点数都是numbers.Number抽象基类的子类。

    这个基类的子类包括numbers.Complexnumbers.Realnumbers.Rationalnumbers.Integral。这些定义和数学上对不同数字的分类是一致的。

    但是,decimal.Decimal类和这些类不太一样。我们可以用下面代码中的issubclass()来看看它和其他类的关系。

    >>>issubclass(decimal.Decimal, numbers.Number )
    True
    >>>issubclass(decimal.Decimal, numbers.Integral )
    False
    >>>issubclass(decimal.Decimal, numbers.Real )
    False
    >>>issubclass(decimal.Decimal, numbers.Complex )
    False
    >>>issubclass(decimal.Decimal, numbers.Rational )
    False

    对于Decimal与所有内置的具体数值类型都没有关系这一点,并不用感到奇怪。对于numbers.Rational的具体实现,请参见fractions模块。在第7章“创建数值类型”中,我们会详细介绍这些不同的数值类型。