(八)python之算术运算的实现(了解知道是怎么实现的就行,不做过多深入的研究)

 (一)、思考问题:python中不仅数值之间能相加,字符串和列表,元祖之间也能进行,这是怎么实现的?(__add__魔术方法)

数字和数字类型之间相加、相减都可以,为什么字符串与字符串之间相加可以,为什么相减却不行?

a = 100
b = 50
print(a + b, a - b)

c = "123"
d = "abc"
print(c + d)
print(c - d)



# 打印结果
150 50
123abc

Traceback (most recent call last):
  File "E:\pycharm\testing_and_development\py09_07day\demo3_算术运算符对应的魔术方法.py", line 13, in <module>
    print(c - d)
TypeError: unsupported operand type(s) for -: 'str' and 'str'

我们自己手写一个类,实现对象与对象之间的加减试试看,目前我们代码报错了,显示MyTest类的对象不支持操作类型 TypeError: unsupported operand type(s) for +: 'MyTest' and 'MyTest'。

 我们类实现__add__方法之后看看代码执行结果,新增代码:

def __add__(self, other):
    return self.value + other.value

 这个代码的执行逻辑是,其实__add__魔术方法实际上就是实现对象与对象之间相加的魔术方法,当我们执行print(m1+m2)的时候,m1会触发MyTest类这个add魔术方法,m1当成参数self穿进去,m2就是other。然后分别获取m1的value属性和m2的value属性,然后想加起来。

注意:三个对象之间不能这样子相加哦

那多个对象之间的相加是怎么实现的?

答:执行顺序都是一个+一个,然后将相加的值再去加第三个对象,永远都是一个加一个。那怎么实现多个对象之间的相加呢?你只要保证你前面相加起来返回回来的是一个对象就好了, 比如m1+m2+m3, m1+m2返回回来是一个对象,那对象+m3就也能执行__add__方法了。(一般没人会这么用,没啥意义。)

def __add__(self, other):
    return MyTest(self.value + other.value)


 

 

(二)其他算术运算符对应的魔术方法

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值