利用特殊方法,来使得自定义对象来实现一个二维向量(Vector)类
一个简单的二维向量类
from math import hypot
class Vector:
def __init__(self, x=0, y=0):
self.x = x # 将输入的x,y分别赋值给类属性x,y
self.y = y
def __repr__(self): # 特殊方法来定义得到一个对象的字符串表示形式
return ‘Vector(%r,%r)‘ % (self.x, self.y)
def __abs__(self):
return hypot(self.x, self.y) # hypot函数计算x,y的平方和开根号
def __bool__(self):
return bool(abs(self)) # 如果一个向量的模是0就返回False
# return bool(self.x and self.y)更高效的__bool__特殊方法的写法
# 省掉了从abs到__abs__到平方再到平方根的这些中间步骤
def __add__(self, other): # 用特殊方法__add__来定义向量与其他向量之间的加法
x = self.x + other.x
y = self.y + other.y
return Vector(x, y)
def __mul__(self, scalar): # 用特殊方法__mul__来定义与标量之间的乘法
return Vector(self.x * scalar, self.y * scalar)
v1 = Vector(2, 4) # 实例化向量类Vector
print(v1)
v2 = Vector(2, 1)
print(v1 + v2) # 向量之间的加法
print(abs(Vector(3, 4))) # 计算向量的模
print(v1 * 3) # 向量与标量之间的乘法
Vector(2,4)
Vector(4,5)
5.0
Vector(6,12)
Python模拟数据类型