类对象的特殊方法之__len__()
"""
内置函数len()用于返回对象长度
"""
print(len([1, 2, 3, 4, 5]))
print(len('abcde'))
print(len({'a':1, 'b':2, 'c':3}))
"""
内置函数len()的实参都是内置类对象的实例对象
"""
# class MyClass(object):
# pass
# print(len(MyClass())) # TypeError: object of type 'MyClass' has no len()
"""
如果想内置函数len()的实参可以是自定义类对象的实例对象,必须在自定义类对象中实现特殊方法__len__().
"""
class MyClass(object):
def __len__(self):
return 20
print(len(MyClass()))
类对象的特殊方法之__iter__() 和 next()
L = [1, 2, 3, 4, 5]
for item in L:
print(item)
"""
for-in语句在默认情况下不能用于自定义的类对象的实例对象
"""
# class MyClass(object):
# pass
#
# for item in MyClass(): # TypeError: 'MyClass' object is not iterable
# print(item)
"""
如果想让for-in语句可以用于自定义类对象的实例对象,必须是在自定义类对象中
实现特殊方法__iter__和__next__。for-in语句首先会调用特殊方法__iter()
返回一个可迭代对象,然后不断调用可迭代对象的特殊方法__next__返回下一个迭代值
直到遇到StopIteration时退出循环
"""
class MyClass(object):
def __init__(self):
self.data = 0
def __iter__(self):
return self
def __next__(self):
if self.data > 5:
raise StopIteration()
else:
self.data += 1
return self.data
for item in MyClass():
print(item)