博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.5 用户定义的可调用类型
阅读量:5117 次
发布时间:2019-06-13

本文共 673 字,大约阅读时间需要 2 分钟。

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

import randomclass 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

 

转载于:https://www.cnblogs.com/wjw2018/p/10672361.html

你可能感兴趣的文章
Jzoj4757 树上摩托
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
第一个Java Web程序
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
Repeater + Resources 列表 [原创][分享]
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
【题解】青蛙的约会
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>
Swift3.0服务端开发(三) Mustache页面模板与日志记录
查看>>
【转】 FPGA设计的四种常用思想与技巧
查看>>
EntityFrameWork 实现实体类和DBContext分离在不同类库
查看>>