class People:
name =''
age = 0
_weight = 0
# 初始化函数,类似构造函数
def __init__(self,n,a,w):
self.name = n
self.age = a
self.iter = 0
_weight = w
"""
真值判断:
定义__bool__,使得外部可以判断实例是否为空,例: 1 if people1 else 2
定义__len__,1.使得外部可以判断实例是否为空,如果同时定义了__bool__,则真值判断时不会执行它,例: 1 if people1 else 2
2.计算实例的长度
"""
def __bool__(self):
return bool(self.name)
def __len__(self):
return len(self.name)
"""
lt 定义小于(<)比较逻辑,使得外部可以使用<符号来比较实例之间的大小 :例 people1 < people2
le 定义小于等于(<=)比较逻辑,使得外部可以使用<=符号来比较实例之间的大小。:例 people1 <= people2
gt 定义大于(>)比较逻辑,使得外部可以使用<符号来比较实例之间的大小。 :例 people1 > people2
ge 定义大于等于(>=)比较逻辑,使得外部可以使用<符号来比较实例之间的大小。 :例 people1 >= people2
"""
def __lt__(self,other):
return self.age < other.age
def __le__(self,other):
return self.age <= other.age
def __gt__(self,other):
return self.age > other.age
def __ge__(self,other):
return self.age >= other.age
def __eq__(self,other):
return self.age == other.age
"""
定义in和not in 操作,使得外部可以通过in,not in 查看一个对象是否在另一个对象里:例:'run' in people1
"""
def __contains__(self,item):
return item in self.name
"""
使得外部可以对实例对象进行哈希。例:hash(people1)
注意:
对于一个可变的对象,不应该支持哈希,因为如果可变,实例的每一次改变,都需要重新生成hash表。开销大
"""
def __hash__(self):
return hash(self.name)
"""
迭代器的实现,使得外部可以用for对实例进行循环: for i in people1
"""
def __iter__(self):
return self
def __next__(self):
if self.iter < len(self.name):
ret = self.name[self.iter]
self.iter += 1
return ret
else:
raise StopIteration
def speak(self):
print("{0} 说:我{1}岁。".format(self.name,self.age))