1. 改变对象的字符串显示
重载 __str__ 和 __repr__ 方法,当打印对象或者将对象转换为字符串的时候,会自动调用这些重载的方法。打印操作会首先尝试 __str__ 和 str 内置函数,当 __str__ 没有定义时,会调用 __repr__。
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return "Point({0},{1})".format(self.x, self.y)
def __str__(self):
return "({0},{1})".format(self.x, self.y)
2. 上下文管理协议
实现 __enter__、__exit__ 来使对象支持上下文管理协议。当出现在 with 语句中的时候,__enter__ 方法被触发,返回的对象被赋值为 as 语句声明的对象,然后执行 with 语句块中的内容。最后触发 __exit__ 方法执行清理工作。
3. 伪私有属性
使用 _ 和 __ 来实现 Python 的伪私有属性。
4. 内存优化
通过给类添加 __slots__ 属性来极大的减少实例所占的内存。
class Person(object):
__slots__ = ['name', 'age']
def __init__(self, name, age):
self.name = name
self.age = age
5. 属性管理
使用 property 来管理类属性。特性协议允许我们把一个特定属性的 get 和 set 操作指向我们所提供的函数或方法,使得我们能够插入在属性操作时自动运行的代码。一个 property 属性实际上就是一系列相关绑定方法的集合。

