类的特殊方法

类对象的特殊方法之__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)
posted @ 2020-04-10 03:05  不知云深处  阅读(234)  评论(0编辑  收藏  举报