FluentPython读书笔记2 --1.1.2

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???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值