前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python类的__call__()方法

Python类的__call__()方法

作者头像
狼啸风云
修改2022-09-03 19:54:32
1.7K0
修改2022-09-03 19:54:32
举报

__call__():Python中,只要在创建类型的时候定义了__call__()方法,这个类型就是可调用的。

Python中的所有东西都是对象,其中包括Int/str/func/class这四类,它们都是对象,都是从一个类创建而来的。元类就是创建这些对象的东西,type就是Python的内建元类。

其中,func是可调用的对象,说明在创建它的类型(父类或它本身)的时候,定义了__call__()方法。

代码语言:javascript
复制
callable(lambda:8)
def fn():
    pass
print(callable(fn))

Output:
------
True
------

所以一个类实例也可以成为类似函数这样能直接调用的对象,只要定义的时候有__call__()方法就可以。

代码语言:javascript
复制
class Reader():
   def __init__(self,name,nationality):
       self.name = name
       self.nationality = nationality
   def __call__(self):
       print('Reader: %s    Nationality: %s' % (self.name, self.nationality))

r = Reader('Annie','Chinese')

r()


Output:
---------------------------------------
Reader: Annie    Nationality: Chinese
---------------------------------------

__call__()方法还可以带参数,定义一个可以直接调用类实例的Reader类,并可统计读者数量

代码语言:javascript
复制
class Reader():

   count = 0

   def __init__(self,name,nationality):
       self.name = name
       self.nationality = nationality
       Reader.count += 1

   def __call__(self, behave):
       print('Reader: %s' % self.name)
       print('Nationality: %s' % self.nationality)
       print('%s is being %s.' % (self.name, behave))
       print('The total number of readers is %s.' % Reader.count)

a = Reader('Annie','Chinese')
a('Nice')

b = Reader('Adam','American')
b('Silly')




Output:
----------------------------------------------
Reader: Annie
Nationality: Chinese
Annie is being Nice.
The total number of readers is 1.
Reader: Adam
Nationality: American
Adam is being Silly.
The total number of readers is 2.
----------------------------------------------
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档