bool

如果没有定义 __bool__() , 实例的布尔值 等效为True
关于内建容器布尔值与长度的关系

内建的容器类型的元素,如果长度为 None 则等效为 False
运算符重载-重要?

比较运算的实现
类的实例本身是不可以进行比较的,通过重载运算符可以实现数学运算,其实就是通过魔术方法,类似上面的 __len__, 如下:
# encoding = utf-8
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other): # 实现等于比较
return self.age == other.age # 比较age
def __lt__(self, other): # 实现小于比较
return self.age < other.age
def __le__(self, other): # 实现小于等于比较
return self.age <= other.age
def __str__(self): # 定义实例的表示
return "<Person: {},{}>".format(self.name, self.age)
__repr__ = __str__
tom = Person('tom', 18)
jerry = Person('jerry', 21)
print(tom == jerry) # 用的 __eq__,相当于 tom.__eq__(jerry)
print(tom < jerry) # 用的 __lt__, 相当于 tom.__lt__(jerry)
print(tom <= jerry) # 用的 __le__, 相当于 tom.__le__(jerry)
print(tom > jerry) # 返过来也能做大于比较, 相当于 tom.__gt__(jerry)
print(sorted([jerry, tom])) # 排序列表

其实直接比较 实例的age属性也是可以的,使用实例直接比较加减看起来高级些,其他用途还没接触,也不清楚。

加减运算的实现:
__sub__ 减法, __add__加法
上下文管理
https://www.hugbg.com/archives/2645.html



评论