程序员经典面试题:数据库如何处理海量数据,赶紧用这招

前言

Python的魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在特定的操作时会自动被调用。魔法方法可以使Python的自由度变得更高,当不重载魔法方法时它可以在规定的默认情况下生效,也可以根据自己的需求来重载分魔法方法来达到自己的目的。

__call__( )

__call__(self,[*args]) 允许一个类实例对象能像函数那样被调用。在介绍__call__之前,我们来先来介绍一个概念,可调用对象:在Python中,凡是可以将()直接应用到自身并执行,都可以称为 可调用对象,它包括 自定义函数,内置函数,类。判断一个对象是否是可调用对象,我们可以用Python内置的函数callable( ),如我们定义了类str_cls,我们可以用它来判断是否是个可调用对象:


>>> class str_cls():
... pass
...

>>> callable(str_cls)
True

# 对实例对象 a 做判断

>>> a = str_cls()
>>> callable(a)
False

可以看到,类是可调用对象,实例对象不是可调用对象,而一旦在类内部实现了 __call__ 方法,那么该类创建的实例对象也将称为一个可调用对象,看下面示例:

>>> class Animal():
... def __init__(self,name,age):
... self.name = name
... self.age = age
... def __call__(self,food):
... print(\"my name is %s,i\'m %d old\" %(self.name,self.age))
... print(\'i eat %s\' % food)
...
>>> dog = Animal(\'dog\',12)
>>> callable(Animal)
True
>>> callable(dog)
True
>>> dog(\'milk\')
my name is dog,i\'m 12 old
i eat milk

可以看到,我们在类Animal中实现了__call__方法,实例对象dog也是可调用对象,并且dog(\'milk\') 实际上是调用了__call__(self,food)方法.
如果没有实现__call__方法,那么去调用dog(\'milk\'),会抛出异常提示Animal实例对象是不可调用的: TypeError: \'Animal\' object is not callable

更多交流关注公众号:猿桌派

上一篇

明星“错位照”有多狠?王俊凯热巴忍住了,看到王一博:笑出腹肌

下一篇

他们拥有双MVP,却没拿过最佳新秀,那么当年是谁压过了他们?

你也可能喜欢

  • 暂无相关文章!

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片
返回顶部