类对象特殊方法——add()、radd()(+ - * / // 操作)
标准算数运算符在默认情况下不能用于自定义类对象的实例对象。
#!/usr/bin/python3
class MyClassA(object):
pass
class MyClassB(object):
pass
print(MyClassA() + MyClassB())
[root@lyucan ~]# ./25.py
Traceback (most recent call last):
File "./25.py", line 12, in <module>
print(MyClassA() + MyClassB())
TypeError: unsupported operand type(s) for +: 'MyClassA' and 'MyClassB'
如果想让标准算数运算符可以用于自定义类对象的实例对象,必须在定义对象中实现标准算数运算符对应的以下特殊方法:
1、+对应的特殊方法是__add__()和__radd__();
2、-对应的特殊方法是__sub__()和__rsub__();
3、*对应的特殊方法是__mul__()和__rmul__();
4、/对应的特殊方法是__truediv__()和__rtruediv__();
5、//对应的特殊方法是__floordiv__()和__rfloordiv__();
之所以可以使用+和运算符操作列表,是因为列表所对应的类对象list中实现了+和对应的特殊方法
之所以可以使用+和运算符操作字符串,是因为字符串所对应的类对象str中实现了+和对应的特殊方法
假设两个运算符obj1和obj2,以+为例,对于obj1 +obj2,需要在obj1对应的自定义类对象中实现特殊方法__add__(),或者在obj2对应的自定义类对象中实现特殊方法__radd__()(radd中的r是right的缩写,因为obj2位于运算符+的右边,所以实现的特殊方法是__radd__();因为obj1位于运算符+的左边,所以实现的特殊方法是__add__() )。
流程图:
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com