from math import hypot
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x, y)
def __abs__(self):
return hypot(self.x, self.y)
def __mul__(self, scalar):
x = self.x * scalar
y = self.y * scalar
return Vector(x, y)
def __bool__(self):
# return bool(self.x or self.y)
return bool(abs(self))
def __repr__(self):
return 'Vector(%r, %r)' % (self.x, self.y)
# def __str__(self):
# return 'str_Vector(%r, %r)' % (self.x, self.y)
v1 = Vector(3, 4)
v2 = Vector(1, 2)
v3 = Vector(0, 0)
print 'abs(v1): ', abs(v1)
print 'v1+v2: ', v1+v2
print 'bool(v1): ', bool(v1)
print 'bool(v3): ', bool(v3)
print 'abs(v3): ', abs(v3)
print str(v1)
主要说下__str__和__repr__方法的区别:
str__方法在print实例(print(v1)),和str()函数中(str(v1))被调用。在没有__str__方法时,会被__repr__替代。
所以,如果只想实现一个,我们可以只实现__repr。
为什么要实现其中的一个:python对象的几个基本要求就是得有合理的字符串表示形式
有个疑问:print 'bool(v3): ', bool(v3) 结果是bool(v3): True。
可是print 'bool(v3): ', bool(v3) 结果是abs(v3): 0.0, bool(0.0) 是Fasle???