Python进阶2——向量模拟

模拟一个二位向量的基本代码如下

import math as m

class vector2d():
	def __init__(self, x, y):
		print('__init__')
		self.x=x
		self.y=y

	def __abs__(self):#执行abs函数时自动调用
		print("__abs__")
		return m.hypot(self.x, self.y)#hypot() 返回欧几里德范数 sqrt(x*x + y*y)。

	def __bool__(self):#执行bool函数时自动调用
		print('__bool__')
		return bool(abs(self))

	def __add__(self, other):#两个对象相加时自动调用
		print("__add__")
		x=self.x+other.x
		y=self.y+other.y
		return vector2d(x,y)

	def __mul__(self, factor):#一个对象乘以一个系数时自动调用
		print('__mul__')
		return vector2d(self.x*factor, 
			self.y*factor)

	def __repr__(self):#打印对象时自动调用
		print('__repr__')
		return 'vector2d(%r, %r)' % (self.x, self.y)

a=vector2d(10, 20);
print("-----------------")
print(a)
print("-----------------")
print(abs(a))
print("-----------------")
print(bool(a))
print("-----------------")
print(a*10)
print("-----------------")
b=vector2d(30,40)
print(a+b)

在类中实现的魔术方法已经在打印的log中得到验证

 

bool的魔术方法也可以换一种方法实现

def __bool__(self):
        print('__bool__')
        return bool(self.x or self.y)

当调用print(bool(a))时,结果一样

 

repr魔术方法如果不重载实现,打印效果如下

所以重载该魔术方法后,在终端打印对象时,打印结果会更加清晰

重载魔术方法主要就是为了实现自己的类,从而让类的表述更加清晰明确

 

参考:

《流畅的Python》

 

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值