zoukankan      html  css  js  c++  java
  • 类的特殊方法

    类对象的特殊方法之__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)
    
  • 相关阅读:
    ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L
    POJ 1088 滑雪 DP
    UVA 11584 最短回文串划分 DP
    POJ 2531 Network Saboteur DFS+剪枝
    UVa 10739 String to Palindrome 字符串dp
    UVa 11151 Longest Palindrome 字符串dp
    UVa 10154 Weights and Measures dp 降维
    UVa 10271 Chopsticks dp
    UVa 10617 Again Palindrome 字符串dp
    UVa 10651 Pebble Solitaire 状态压缩 dp
  • 原文地址:https://www.cnblogs.com/huanyinglvtuan/p/12670904.html
Copyright © 2011-2022 走看看