码迷,mamicode.com
首页 > 其他好文 > 详细

5.5 用户定义的可调用类型

时间:2019-04-08 18:36:14      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:rom   oca   class   raise   pytho   pre   python   函数   __call__   

不仅 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

 

5.5 用户定义的可调用类型

标签:rom   oca   class   raise   pytho   pre   python   函数   __call__   

原文地址:https://www.cnblogs.com/wjw2018/p/10672361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!