怎样用计算机算出54188,对象也可以当方法用?
### 1、问题
我刚开始接触爬虫的时候,只是看完了 python 的基础,对 python 的语法还没有一个很深入的了解,在使用 bs4 这个库的时候,对其中某些语法感到非常的惊奇,不明白是怎么实现的。
bs4 的官方文档中说到:`find_all()` 几乎是 Beautiful Soup 中最常用的搜索方法,所以我们定义了它的简写方法。`BeautifulSoup` 对象和 `tag` 对象可以被当作一个方法来使用,这个方法的执行结果与调用这个对象的 `find_all()` 方法相同,下面两行代码是等价的:
```
soup.find_all("a")
soup("a")
```
这里,`soup` 是一个 `BeautifulSoup` 对象,`soup("a")` 这很明显是把对象当方法使用了,这是怎么做到的呢?
### 2、实现
在 Python 中,除了用户定义的函数,调用运算符(即 ())还可以应用到其他对象上。内置的 `callable()` 函数用来判断一个对象能否调用。就是说,任何 Python 对象都可以表现得像函数一样,为此,只需实现实例方法 `__call__`。
来看一个简单的示例:
```
class Sum:
def __init__(self, x, y):
self._x = x
self._y = y
def add(self):
return self._x + self._y
def __call__(self):
return self.add()
sum = Sum(1, 2)
print(sum.add())
print(sum())
print(callable(sum))
```
**输出:**
```
3
3
True
```
这样就明白了,bs4 中亦是如此,源码如下:
```
class Tag(PageElement):
def __call__(self, *args, **kwargs):
return self.find_all(*args, **kwargs)
```
这背后涉及到的概念叫做**可调用对象**,Python 数据模型文档列出了 7 种可调用对象。
- **用户定义的函数**:使用 def 语句或 lambda 表达式创建。
- **内置函数**:使用 C 语言(CPython)实现的函数,如 len 或 time.strftime。
- **内置方法**:使用 C 语言实现的方法,如 dict.get。
- **方法**:在类的定义体中定义的函数。
- **类**:调用类时会运行类的 `__new__` 方法创建一个实例,然后运行 `__init__` 方法,初始化实例,最后把实例返回给调用方。因为 Python 没有 `new` 运算符,所以调用类相当于调用函数。(通常,调用类会创建那个类的实例,不过覆盖 `__new__` 方法的话,也可能出现其他行为。)
- **类的实例**:如果类定义了 `__call__` 方法,那么它的实例可以作为函数调用。
- **生成器函数**:使用 yield 关键字的函数或方法。调用生成器函数返回的是生成器对象。
> 转自 https://juejin.im/post/5cc2a673f265da03b2043673
怎样用计算机算出54188,对象也可以当方法用?相关推荐
- 怎样用计算机算出圆周率,古代没有计算机的时代 祖冲之是如何算出圆周率的...
原标题:古代没有计算机的时代 祖冲之是如何算出圆周率的 今天趣历史小编就给大家带来祖冲之的文章,希望能对大家有所帮助. 祖冲之,提起这个名字大家首先想到的就是圆周率,因为,圆周率是祖冲之的代表性成果. ...
- 如何用计算机算出男朋友的身高,【趣味物理】如何用物理方法测出男生的真实身高?...
原标题:[趣味物理]如何用物理方法测出男生的真实身高? 毕导,本名毕啸天,清华大学化工系博士生,今日头条优质科普内容创作者. 如何测出男生的真实身高? 男生常常会隐瞒身高,173敢报178,175就敢 ...
- 用计算机算出90除以6.28,谁能帮忙出300道二年级下期的数学竖式题
谁能帮忙出300道二年级下期的数学竖式题 谁能帮忙出300道二年级下期的数学竖式题 人气:936 ℃时间:2019-12-08 09:45:28 优质解答 25 -15 -80 = 10 -80 = ...
- 什么用计算机算出自己在世界上活.了几天,据说科学家发现了一个“寿命计算器”,来算一下自己能活多久?...
原标题:据说科学家发现了一个"寿命计算器",来算一下自己能活多久? 为什么有的人能活到100岁? 为什么有的人却早早离世? 到底是什么影响着我们的寿命? 据生命时报,美国坦普尔大学 ...
- 用计算机算出女神的生日,Excel中通过出生日期智能计算年龄或虚岁 | 我爱分享网...
在 Excel里计算年龄可是很常见的一项工作,你会吗?接下来就给大家分享一下怎么通过出生日期计算出女神的真实年龄.虚岁! 方法/技巧: 1.自动算周岁 这是最简单的,只要知道今天的日期和出生日期,Ex ...
- 用计算机算出自己鞋码和年龄,魔力科学小实验,用鞋码数就能算出你的年龄,这个算式就这么厉害?...
原标题:魔力科学小实验,用鞋码数就能算出你的年龄,这个算式就这么厉害? 每天1个科学小知识,培养孩子的科学素养. 文|魔力科学小实验,本文为原创,欢迎关注及转载分享. 最近有道非常火的数学题,说是 ...
- 怎么用计算机算出年龄鞋码,一种预测鞋码的方法、装置和系统以及计算机可读存储介质与流程...
本发明涉及一种预测鞋码的方法.装置和系统以及计算机可读存储介质,更具体而言,涉及一种利用多维变量的预测鞋码的方法.装置和系统以及计算机可读存储介质. 背景技术: 现今在网上购买衣服及其他物品已是非常之 ...
- 用计算机算出90除以6.28,用计算器计算:sin51°30′+ cos49°50′-tan46°10′的值是 .——青夏教育精英家教网——...
题目所在试卷参考答案: 参考答案 一.基础.巩固达标 1.在Rt△ABC中,如果各边长度都扩大2倍,则锐角A的正弦值和余弦值( ) A.都没有变化 B.都扩大2倍 C.都缩小2倍 D.不能确定 思路解 ...
- 怎么用计算机算出出生日期,算农历出生日期计算器,根据出生日期怎么算年龄?...
提起算农历出生日期计算器,大家都知道,有人问根据阴历日期和出生时间算阳历,另外,还有人想问农历虚岁计算器 农历虚岁怎么算,你知道这是怎么回事?其实农历生日如何算,下面就一起来看看根据出生日期怎么算年龄 ...
- 四年级用计算机算出本月合计,四年级数学下册简算练习题及答案
四年级数学下册简算练习题及答案 导语:学问是异常珍贵的东西,从任何源泉吸收都不可耻.下面是小编为大家整理的,数学知识,更多相关信息请关CNFLA学习网! 一.知识万花筒. 1.特快列车1小时大约行16 ...
最新文章
- PyTorch 重磅更新,不只是支持 Windows
- repo 修改邮箱地址
- 修改开发环境、工程、文件的字符集
- 悟懂MapReduce,不纠结!
- JavaScript 断点调试技巧
- 复数抽象数据类型C语言,采用C/C++语言如何实现复数抽象数据类型Complex
- Thread.yield()
- jcmd jmap应用:一个String经典笔试题的验证
- CMake,win10,64位,简单配置测试
- R语言生信作图代码集合大全
- FIFO、LRU、LFU的含义和原理(转)
- 边缘计算与嵌入式系统
- HTML5表单技术 调查问卷设计
- 分享一个支持离线下载的免费网盘
- char *c和char c[]区别
- 在 MySQL 数据库中删除重复记录的步骤
- 填数字游戏ABCD*E=DCBA
- oracle锁矩阵,你有多了解Oracle Enqueue lock队列锁机制?
- JAVA自我总结和分享—JVM
- 第15节--神经网络应用--异或判断、手写数字识别