7.7 总结

    我们已经介绍了内置的数值类型,也看了很多在创建新数值类型时所需的特殊方法。特殊的数值类型可以与Python其余部分无缝集成,是这个语言的一大特色。除非使用得当,否则并不意味着工作的简化。

    7.7.1 设计要素和折中方案

    当使用数值时,设计分为以下几步。

    1.考虑使用内部版本的complexfloatint类型。

    2.考虑类库的扩展部分,例如decimalfractions。对于金融领域的计算,一定要使用decimal,它是唯一的选择。

    3.考虑使用方法或属性扩展以上所述的几种类型。

    4.最终,考虑创建新的数值类型。这是非常有挑战的,而Python中可用的数值类型已经很丰富了。

    设计新的数值类型需要考虑如下几点。

    • 完整性与一致性:一个新的数值类型必须包含了完整的操作集合并且在所有的表达式中它们的行为是一致的。对于有计算能力的新数值类型,重点在于需要为正式的数学定义提供相应的实现。
    • 适用于问题的领域:这个数值合适吗?它是否为一个明确的解决方案?
    • 性能:正如所有设计所遇到的问题,我们需要确保其足够高效。比如本章的例子中,使用了一些并不高效的浮点数操作,它们可以通过一些数学技巧和少量代码进行优化。

    7.7.2 展望

    在下一章中,会使用装饰器和mixin来对类的设计进行简化和标准化。我们可以使用装饰器来定义一些功能,它们可以被用在很多类中,但这些类的关系并非只是简单继承。类似地,可以使用mixin的类定义从组建类的定义中创建一个完整的应用程序类。装饰器的好处之一就是定义比较运算符,即@functools.total_ordering装饰器。