免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3374 | 回复: 0

Python 类中的一些 运算符 methods 的重载 [复制链接]

论坛徽章:
0
发表于 2009-01-10 11:49 |显示全部楼层
看一个例子:

  1. >>> class A():
  2. ...     def __init__(self, n):
  3. ...             self.data = n
  4. ...     def __add__(self, i):
  5. ...             return self.data + i
  6. ...
  7. >>> a1 = A(1)
  8. >>> a2 = A(2)
  9. >>> a1 + 2
  10. 3
  11. >>> 2 + a2
  12. Traceback (most recent call last):
  13.   File "<stdin>", line 1, in <module>
  14. TypeError: unsupported operand type(s) for +: 'int' and 'instance'
  15. >>> a1 + a2
  16. Traceback (most recent call last):
  17.   File "<stdin>", line 1, in <module>
  18.   File "<stdin>", line 5, in __add__
  19. TypeError: unsupported operand type(s) for +: 'int' and 'instance'
  20. >>> class A():
  21. ...     def __init__(self, n):
  22. ...             self.data = n
  23. ...     def __add__(self, i):
  24. ...             return self.data + i
  25. ...     def __radd__(self, i):
  26. ...             return self.data +i
  27. ...
  28. >>> a1 = A(1)
  29. >>> a2 = A(2)
  30. >>> a1 + a2
  31. 3
  32. >>>
复制代码

有以上可以看出:类中两元运算符是有方向性的
‘+’ 运算符:
__add__ method 是 左结合
__radd__ method 是 右结合
当左结合和右结合都定义时,才能实现类的两个对象运用 '+' 来计算
a1 + 2
此表达式计算时:a1 调用 '__add__' method
2 + a2
此表达式计算时:a2 调用 '__radd__' method
a1 + a2
此表达式计算时:a1 调用 '__add__' method,a2 调用 '__radd__' method

类似的运算符有:

  1. 与:& __and__, __rand__
  2. 或:| __or__, __ror__
  3. 异或:^  __xor__, __rxor__
  4. 加:+  __add__, __radd__
  5. 减:-  __sub__, __rsub__
  6. 乘:*  __mul__, __rmul__
  7. 除:/  __div__, __rdiv__
  8. 整除://  __floordiv__, __rfloordiv__
  9. 右移:>>  __rshift__, __rrshift__
  10. 左移:<<  __lshift__, __rlshift__
  11. ...
复制代码

[ 本帖最后由 爱知 于 2009-1-10 11:51 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP