正如java有个顶级类Object一样,Object类提供了hashCode equals toString等一系列方法。
那么python中的object也是一样,并且这些方法感觉上会更强大,更灵活。
本文仅做一个总结,方便日后查阅。
- __slots__ 限制类的属性
- __len__() 实现了它才能被len()方法调用
- __str__() 和 __repr__() 前者是print()方法输出对象时调用,后者是在命令行直接对象回车调用
- __iter__()和__next__() 配合将类变成Iterator
- __getitem__()和__setitem__(),__delitem__()将类变成 list
- __getattr__() 当getattr()方法没有找到属性时调用 可以对类中的所有属性和方法进行动态管理
- __call__() 当直接在对象上(),也就是调用对象时,调用
以上的例子
- __new__() 创建实例self
- __init__() 初始化,用self去绑定属性
- __enter__() with语句中会用,执行with内层的代码前调用,注意顺序with语句会__init__实例化
- __exit__() with语句中会用,执行with内层的代码后调用
- __import__() 动态加载类 相当于import module 如果有package加上fromlist关键字指定导入的py文件
更多定制类,详见python官方文档