python的特殊方法使得python的编程方式更加的统一规范。
python的特殊方法是被python解释器直接调用的,我们不需要直接调用它。也就是说部能写成object.len(),而应该写成len(object)。len()会直接调用object.__len()__方法。
如果是python的内置类型,比如list/str/bytearray,Cpython会直接读取PyVarObject的ob_size的属性。
for i in x这个语句背后调用的是x.iter()方法
非计算的特殊方法
类型 | 特殊方法 |
---|---|
字符串/字节序列表示形式 | __repr__ , __str__ , __format__ , __bytes__ |
数值转换 | __abs__ , __bool__ , __complex__ , __int__ , __float__ , __hash__ ,__index__ |
集合模拟 | __len__ , __getitem__ , __setitem__ , __delitem__ , __contains__ |
迭代 | __iter__ , __reversed__ , __next__ |
可调用模拟 | __call__ |
上下文管理 | __enter__ , __exit__ |
实例创建和销毁 | __new__ , __init__ , __del__ |
属性管理 | __getattr__ , __getattribute__ , __setattr__ , __delattr__ , __dir__ |
属性描述符 | __get__ , __set__ , __delete__ |
跟类相关的服务 | __prepare__ , __instancecheck__ , __subclasscheck__ |
参考:
https://rszalski.github.io/magicmethods/