常见的魔术方法

类的基础方法

  • __init__ : 初始化一个实例,调用在实例创建之后
  • __new__ : 创建一个实例,操作实例的实际创建进程
  • __repr__ : 字符串的官方表现形式
  • __str__ : 字符串的非正式值,print() 调用
  • __bytes__ : 字节数组的非正式值
  • __format__ : 格式化字符串的值

行为方式与迭代器类似的类

  • __iter__ : 遍历某个序列,创建迭代器,初始化迭代器
  • __next__ : 从迭代器中获取下一个值
  • __reversed__ : 按逆序创建一个迭代器

计算属性

  • __getattribute__ : 获取一个计算属性(无条件的)
  • __getattr__ : 获取一个计算属性(后备)
  • __setattr__ : 设置某属性
  • __delattr__ : 删除某属性
  • __dir__ : 列出所有属性和方法,同 dir()
  • __len__ : 计算序列的长度
  • __contains__ : 了解序列是否包含特定的值,x in seq
  • __getitem__ : 通过键获取值,x[key]
  • __setitem__ : 通过键设置值,x[key]=value
  • __delitem__ : 删除一个键值对
  • __missing__ : 为缺失键提供默认值,x[nonexistent]

可比较的类

  • __eq__ : 相等, x==y
  • __ne__ : 不相等,x!=y
  • __lt__ : 小于,x<y
  • __le__ : 小于或等于,x<=y
  • __gt__ : 大于,x>y
  • __ge__ : 大于或等于,x>=y
  • __bool__ : 布尔上下文环境中的真值,if x:

可序列化的类

  • __copy__ : 自定义对象的复制
  • __deepcopy__ : 自定义对象的深度复制
  • __getstate__ : 在 picking 之前获取对象的状态
  • __reduce__ : 序列化某对象
  • __reduce_ex__ : 序列化某对象(新的 picking 协议)
  • __getnewargs__ : 控制 unpicking 过程中对象的创建方式
  • __setstate__ : 控制 unpicking 之后恢复对象的状态

可在 with 语块中使用的类

  • __enter__ : 在进入 with 语块时执行的特别操作
  • __exit__ : 在退出 with 语块 时执行的特别操作。with 语块执行结束后总是自动保存文件实际就是在 __exit__() 方法中调用了 self.close() 方法。

Others

  • __new__ : 类构造器。__new____init__的区别
  • __del__ : 删除对象,回收。
  • __hash__ : 自定义散列值
  • __get__ : 获取某个属性的值 type(x).__dict__['color'].__get__(x, type(x))
  • __set__ : 设置某个属性的值 type(x).__dict__['color'].__set__(x, 'PapayaWhip')
  • __del__ : 删除某个属性的值 type(x).__dict__['color'].__del__(x)
  • __isinstansecheck__ : 控制某个对象是否是该对象的实例
  • __subclasscheck__ : 控制某个类是否是该类的子类
  • __subclasshock__ : 控制某个类是否是该抽象基类的子类
  • __add__ : 等价于 x+y
  • __base__ : 关于类继承和函数查找路径
  • __bases__ : 关于类继承和函数查找路径
  • __mro__ : 关于类继承和函数查找路径
  • __subclasses__ : 返回子类列表
  • __call__ : 定义对象在调用时的操作
  • __cmp__ : 在比较的时候调用
  • __sizeof__ : 对象在内存中的字节数
  • __basicsize__ : 类在内存中的字节数

参考