【大爆炸】 __call__

使得类实例对象可以像调用普通函数那样,以“对象名()”的形式使用

http://c.biancheng.net/view/2380.html

 

用 __call__() 弥补 hasattr() 函数的短板
前面章节介绍了 hasattr() 函数的用法,该函数的功能是查找类的实例对象中是否包含指定名称的属性或者方法,但该函数有一个缺陷,即它无法判断该指定的名称,到底是类属性还是类方法。

要解决这个问题,我们可以借助可调用对象的概念。要知道,类实例对象包含的方法,其实也属于可调用对象,但类属性却不是。举个例子:
纯文本复制
class CLanguage:
def __init__ (self):
self.name = "C语言中文网"
self.add = "http://c.biancheng.net"
def say(self):
print("我正在学Python")
clangs = CLanguage()
if hasattr(clangs,"name"):
print(hasattr(clangs.name,"__call__"))
print("**********")
if hasattr(clangs,"say"):
print(hasattr(clangs.say,"__call__"))

posted @ 2021-03-04 17:00  峡谷恶霸  阅读(52)  评论(0编辑  收藏  举报