from math import hypot
class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __repr__(self):
return 'Vector(%r, %r)' % (self.x, self.y)
def __abs__(self):
return hypot(self.x, self.y)
def __bool__(self):
return bool(abs(self))
def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x, y)
def __mul__(self, scalar):
return Vector(self.x * scalar, self.y * scalar)
定义一个向量类Vector
__repr__ 实现对象的字符串表达方式,也可实现__str__
__abs__ 实现模运算,调用方式 abs(v)
实例:
c = Vector(3,4)
abs(c)
# Out[4]: 5.0
c
# Out[5]: Vector(3, 4)
str(c)
# Out[6]: 'Vector(3, 4)'
repr(c)
# Out[7]: 'Vector(3, 4)'
print('%s' % c)
# Vector(3, 4)
__add__ 和 __mul__ 实现了 + 和 * 运算
c+Vector(3,4)
# Out[15]: Vector(6, 8)
c*3
# Out[16]: Vector(9, 12)
__bool__ 实现了 bool类型
当向量模为0时 返回False,否则返回True
bool(c)
#Out[18]: True
bool(Vector(0,0))
#Out[19]: False
bool(Vector(-3,-4))
# Out[20]: True
更高效的实现:
def __bool__(self):
return bool(self.x or self.y)
省略了模运算的过程
验证:
bool(3 or 4)
#Out[21]: True
bool(-3 or 4)
#Out[22]: True
bool(0 or 4)
#Out[23]: True
bool(0 or 0)
#Out[24]: False