zoukankan      html  css  js  c++  java
  • 5.5 用户定义的可调用类型

    不仅 Python 函数是真正的对象,任何 Python 对象都可以表现得像函数。为此,只需实现实例方法 __call__。 

    import random
    
    class BingoCage:
    def __init__(self, items):
        self._items = list(items)  ➊ 
        random.shuffle(self._items)  ➋
    
    def pick(self):  ➌
        try: 
            return self._items.pop()
        except IndexError:
            raise LookupError('pick from empty BingoCage')  ➍
    
    def __call__(self):  ➎
        return self.pick() 

    ❶ __init__ 接受任何可迭代对象;在本地构建一个副本,防止列表参数的意外副作用。

    ❷ shuffle 定能完成工作,因为 self._items 是列表。

    ❸ 起主要作用的方法。

    ❹ 如果 self._items 为空,抛出异常,并设定错误消息。

    ❺ bingo.pick() 的快捷方式是 bingo()。

    输出示例:

    >>> bingo = BingoCage(range(3)) 
    >>> bingo.pick()
    1 
    >>> bingo() 
    0 
    >>> callable(bingo) 
    True
  • 相关阅读:
    KMP算法
    IEEE754 32位浮点数表示范围
    银行家算法
    字符串类
    栈类
    稀疏数组类
    队列类
    多维数组类
    单向链表类
    哈希表类
  • 原文地址:https://www.cnblogs.com/wjw2018/p/10672361.html
Copyright © 2011-2022 走看看