国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python基础教程 > Python __call__方法(详解版)

Python __call__方法(详解版)

头像

silencement

2019-07-06 10:24:573814浏览 · 0收藏 · 0评论

我们用 hasattr() 函数判断指定属性(或方法)是否存在,但到底是属性还是方法,则需要进一步判断它是否可调用。程序可通过判断该属性(或方法)是否包含 __call__ 属性来确定它是否可调用。

例如如下程序:

class User:
    def __init__(self, name, passwd):
        self.name = name
        self.passwd = passwd
    def validLogin (self):
        print('验证%s的登录' % self.name)       
u = User('crazyit', 'leegang')
# 判断u.name是否包含__call__方法,即判断是否可调用
print(hasattr(u.name, '__call__')) # False
# 判断u.passwd是否包含__call__方法,即判断是否可调用
print(hasattr(u.passwd, '__call__')) # False
# 判断u.validLogin是否包含__call__方法,即判断是否可调用
print(hasattr(u.validLogin, '__call__')) # True

上面程序中粗体字代码分别判断 User 对象的 name、 passwd、 validLogin 是否包含 __call__ 方法,如果包含该方法,则表明它是可调用的,否则就说明它是不可调用的。

从上面程序的输出结果不难看到,对于 name、 passwd 两个属性,由于它们都是不可调用的,因此程序在判断它们是否包含 __call__ 方法时输出 False;对于 validLogin 方法,由于它是可调用的,因此程序在判断它是否包含 __call__  方法时输出 True。

实际上,一个函数(甚至对象)之所以能执行,关键就在于 __call__() 方法。实际上 x(arg1, arg2,...) 只是 x.__call__(arg1, arg2, ...) 的快捷写法,因此我们甚至可以为自定义类添加 __call__ 方法,从而使得该类的实例也变成可调用的。例如如下代码:

# 定义Role类
class Role:
    def __init__ (self, name):
        self.name = name
    # 定义__call__方法
    def __call__(self):
        print('执行Role对象')
r = Role('管理员')
# 直接调用Role对象,就是调用该对象的__call__方法
r()

上面程序中最后一行代码使用调用函数的语法来调用对象,这看上去似乎是错误的,但由于该 Role 类提供了 __call__ 方法,因此调用对象的本质就是执行该对象的 __call__ 方法。运行上面代码,将看到如下输出结果:

执行Role对象

对于程序中的函数,同样既可使用函数的语法来调用它,也可把函数当成对象,调用它的 __call__ 方法。例如如下示例代码:

def foo ():
    print('--foo函数--')
# 下面示范了2种方式调用foo()函数
foo()
foo.__call__()

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

吨叔| 玉女心经| 绝美儿媳妇苏酥| 鹿鞭丸的功效和作用| 泰国电影《初次深交流》| 干爹你真棒插曲免费看| 45岁老阿姨喷了三次尿素乳育| 欧美大片PPT免费PPT| 脱了内裤在阳台趴着被C| 《厨房激战5》完整版在线观看| 小妹妹爱大棒棒免费观看电视剧 | 台球室的特殊待遇2HD| 妈妈的职业4免费观看完整版高清| 小蓝彩虹男GARY2023的音..| 教练车内含乳挺进她漫画| 《急救护士1982满天星》| 小视频| 少女与狗2在线观看免费版高清 | 粗大的蘑菇头刮得又红又肿怎么办| 公司企业文化展示墙| 《地下偶像》樱花动浸| 潘源良| 《借种生子》电影免费观看| 女士泳衣全透明| 两男一女一起做运动什么心理| 女生的隐私曝光| 女友躲雨被老头玩弄| 蜜桃来偷欢免费观看高清电视剧| B站暴躁女RAPPER| 穿黑色蕾丝透明胸罩说明什么| 老阿姨高清免费观看电视剧 | 《灭火宝贝4》| 温柔女教师在线观看电视剧大全| 《XL司令》第一季动漫免费播放| 与公在客厅添我荫蒂视频| 男友在客厅把我添高潮了| 7777777亚洲和欧洲尺码表| 丰年经继拇中文3的主要角色分析 妈妈出轨了免费观看电视剧全集 嫂嫂宝库免费观看电视剧全部 | 18岁的少女与狗高清电视剧| 鲁鲁射击免费播放电视剧全部| 日本无码A片人妻久尤物明理紬