2.10 总结
我们已经介绍了许多基本的特殊方法,它们是我们在设计任何类时的基本特性。这些方法已经包含在每个类中,只是它们的默认行为不一定能满足我们的需求。
我们几乎总是需要重载__repr__()、__str__()、和__format__()。这些方法的默认实现不是非常有用。
我们几乎不需要重载__bool__()方法,除非我们想自定义集合。这是第6章“创建容器和集合”的主题。
我们常常需要重载比较运算符和__hash__()方法。默认的实现只适合于比较简单不可变对象,但是不适用于比较可变对象。我们不一定要重写所有的比较运算符,在第8章“装饰器和mixin——横切方面”中,我们会详细介绍functools. total_ordering修饰符。
另外两个较为特殊的方法__new__()和__del__()有更特殊的用途。大多数情况下,使用__new__()来扩展不可变类型。
基本的特殊方法和__init__()方法几乎会出现在我们定义的所有类中。其他的特殊方法则有更特殊的用途,它们分为6个不同的类别。
- 属性访问:这些特殊方法实现的是表达式中object.attribute的部分,它通常用在一个赋值语句的左操作数以及del语句中。
- 可调用对象:一个实现了将函数作为参数的特殊方法,很像内置的len()函数。
- 集合:这些特殊方法实现了集合的很多特性,包括sequence[index]、mapping[index]和set | set。
- 数字:这些特殊方法提供了算术运算符和比较运算符。我们可以用这些方法扩展Python支持的数值类型。
- 上下文:有两个特殊方法被我们用来实现可以和with语句一起使用的上下文管理器。
- 迭代器:有一些特殊方法定义了一个迭代器。没有必要一定要使用这些方法,因为生成器函数很好地实现了这种特性。但是,我们可以了解如何实现自定义的迭代器。
时间: 2024-10-22 20:47:07