python学习之类特殊方法定制 __add__,__iadd__,__radd__

__add__,表示‘左加’,及两个类型相加,A中有__add__,A的实例+B的实例,则能够执行,反之报错。

>>> class A:
pass

>>> class B:
def __add__(self,obj):
print ('B.__add__')
return self.v+obj.v

>>> b=B()

>>> a=A()

>>> b.v=2

>>> a.v=3

>>> b+a
B.__add__
5
>>> a+b
Traceback (most recent call last):
  File "<pyshell#33>", line 1, in <module>
    a+b
TypeError: unsupported operand type(s) for +: 'A' and 'B'

以上__add__定义后,可以操作在左边的报错,而处理右边则需要__radd__


>>> class B:
def __radd__(self,a):
print ('B.__radd__')
return self.v+a.v


>>> a+b
B.__radd__
5
>>> b+a
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    b+a
TypeError: unsupported operand type(s) for +: 'B' and 'A'


而__iadd__(原位操作)是为处理+=操作符。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值