第7章 创建数值类型
我们可以通过扩展numbers
模块的基本抽象类来创建新的数值类型。对于一些应用场景来说,创建自定义数值类型比起使用内部类型可能更合适。
需要先看一下numbers
模块中的抽象部分,因为它们是内部的抽象基类。在开始创建新的数值类型之前,了解已有的数值类型是基本的。
在这里作为一个题外话,先来介绍一下Python中从运算符到方法的映射算法。思路是这样的,二进制运算符包含了两种操作,任何一种操作都可以定义实现运算符的类。在Python中,要决定实现哪些特殊方法之前,先要确定对相关类的定位规则。
基本的算数运算符例如+、-、*、/、//、%和**构成了主要的数值操作。还有一些其他的运算符,包括^、|和&。它们用于对整数进行位运算,也会用于运算集合。还有一些其他的运算符,比如<<、>>。比较运算符在第2章“与Python无缝集成——基本特殊方法”中已经介绍过了,它们包括<、>、<=、>=、==和!=。本章会进一步学习它们。
numbers
中还有一些其他特殊方法,包括与其他类型的转换。Python也定义了一些原地运算符,包括+=、−=、*=、/=、//=、%=、**=、&=、|=、^=、>>=和<<=。比起numbers
,它们更适用于不可变对象。最后,会总结一些在进行numbers
的自定义和扩展时需要考虑的细节。
7.1 numbers的抽象基类
numbers
包提供了大量的数值类型,它们都实现了numbers.Number
。另外,fractions
和decimal
模块提供了可扩展的数值类型:fractions.Fraction
和decimal.Decimal
。
这些类定义基本和数学中数的分类是一致的。如果要了解数论中不同数的基本概念。可以参见这篇文章http://en.wikipedia.org/wiki/Number_theory ...
Get Python面向对象编程指南 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.