Python对象协议

Python中存在多种协议,用于实现鸭子类型(Duck Typing),下面分类介绍一下:

  1. 转换协议:

    1. __str__:在字符串格式化中如果有%s占位符的话,Python会自动地调用相应对象的__str__()方法格式化输出;
    2. __repr__: 同样是格式化字符串,只是输出应面向机器(开发者);
    3. 其他的还有__long__ __float__等,根据字面很好理解
  2. 比较大小的协议:__eq__ __ne__ __lt__ __gt__分别实现相等、不相等、小于、大于等判定,是实现操作符重载的基础;

  3. 数值类型相关:

    1. 数值运算: __add__ __mul__ __pow__等,分别实现相加、相乘、幂运算等;
    2. 位运算: __lshift__ __rshift__ __and__ __xor__ 分别实现左移位(<<)、右移位(>>)、逻辑与、异或等操作;
    3. 运算赋值符: __iadd__ __imul__ 实现+=、*=等操作;
    4. 其他还有__pos__ __neg__ __abs__实现正、负和绝对值等。
  4. 容器协议: __len__(查询容器中有多少对象) __getitem__(通过类似a[i]形式获得i位置对象) __setitem__(通过类似a[i]形式设置i位置对象) __delitem__ __reversed__等;

  5. 可调用对象协议: 通过它可以让类表现得像函数一样,例如__init__ __new__ __call__
  6. 可哈希对象:只有支持可哈希协议类型才能作为字典的键,不过继承自object的新式类默认都支持;
  7. 属性协议: __getattr__ __setattr__ __delattr__获得、设置和删除类中指定的属性;
  8. 上下文管理协议: 当我们打开文件等需要及时关闭的流对象时,可以使用with语句,它能够在使用完之后自动关闭对象;它的内部原理其实是实现了__enter____exit__两个上下文管理对象,用户自定类只要实现了这两个方法就能使用with语句自动完成相关的清理工作。
参考自《编写高质量代码:改善Python程序的91条建议》
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值