Numbers

When creating new numbers (or extending existing numbers), we turn to the numbers module. This module contains the abstract definitions of Python's built-in numeric types. These types form a tall, narrow hierarchy, from the simplest to the most elaborate. In this context, simplicity (and elaborateness) refers to the collection of methods available.

There's an abstract base class named numbers.Number that defines all of the numeric and number-like classes. We can see that this is true by looking at interactions like the following one:

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

Clearly, integer and float values are subclasses of the abstract numbers.Number class. The subclasses of Number include numbers.Complex, numbers.Real, numbers.Rational, and numbers.Integral. These definitions are roughly parallel to the mathematical concepts used to define the various classes of numbers.

The decimal.Decimal class, however, doesn't fit this hierarchy very well. We can check the relationships using the issubclass() method as follows:

>>> 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 

While the decimal.Decimal class seems closely aligned with numbers.Real, it is not formally a subclass of this type.

For a concrete implementation of numbers.Rational, look at the fractions module. We'll look at the various kinds of numbers in detail in Chapter 8, Creating Numbers.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset