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
评论