[Python]自学笔记25:魔法方法(3):算术运算2

1.可以对原有的类进行修改覆盖

>>> class int(int):
	def __add__(self,other):
		return int.__sub__(self,other)

	
>>> a = int('5')
>>> a
5
>>> b = int('3')
>>> a + b
2

2.反运算
在这里插入图片描述
比如说 a + b
当a不支持进行加法运算或没有实现时(比如说实际的数字1,2,3),就会实行b的反运算.

>>> class nint(int):
	def __radd__(self,other):
		return int.__sub__(self,other)

	
>>> a = nint(5)
>>> b = nint(3)
>>> a + b
8
>>> 1 + b   '''因为1是一个数字,而不是一个实例对象,所以不支持加法运算,所以就会调用b的反运算'''
2   '''此处重写使它变为减法是为了好理解'''
>>> class nint(int):
	def __rsub__(self,other):
		return int.__sub__(self,other)   '''此处是修改原函数之后的'''

	
>>> a = nint(5)
>>> 3 - a
2
>>> class nint(int):
	def __rsub__(self,other):
		return int.__sub__(other,self)   '''此处为原函数'''

	
>>> a = nint(5)
>>> 3 - a
-2

3.增量赋值运算
如 += ,-=。
在这里插入图片描述
4.一元操作符
只有一个操作数时
如 -(取相反数),abs()(取绝对值)等。
在这里插入图片描述

以上所有方法都可以重写,DIY。

定义一个类 Nstr,当该类的实例对象间发生的加、减、乘、除运算时,将该对象的所有字符串的 ASCII 码之和进行计算:
方法一

>>> class Nstr:
	def __init__(self,arg=''):
		if isinstance(arg,str):  #判断传入的值是不是字符串
			self.count = 0
			for i in arg:
				self.count += ord(i)
		else:
			print('参数错误!')
	def __add__(self,other):
		return self.count + other.count
	def __sub__(self,other):
		return self.count - other.count
	def __mul__(self,other):
		return self.count * self.count
	def __truediv__(self,other):
		return self.count / other.count
	def __floordiv__(self,other):
		return self.count // other.count

	
>>> a = Nstr('lubenwei')
>>> b = Nstr('niubi')
>>> a + b
1394
>>> a - b
324
>>> a * b
737881
>>> a / b
1.605607476635514
>>> a // b
1

方法2:

>>> class Nstr(int):
	def __new__(cls,arg=0):  #在对象实例被创建的一刻执行
		if isinstance(arg,str):
			count = 0
			for each in arg:
				count += ord(each)
			arg = count
		return int.__new__(cls,arg)

	
>>> a = Nstr('lubenwei')
>>> b = Nstr('niubi')
>>> a + b
1394
>>> a - b
324
>>> a * b
459565
>>> a / b
1.605607476635514
>>> a // b
1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值