类的可调用实例

调用方法

机器人打电话

几乎没有任何 Python 用户没有偶然发现诸如'dict' object is not callable或 之类的异常'int' object is not callable。过了一会儿,他们找出了原因。他们在不应该这样做的情况下使用了括号(圆括号)。像f(x),gcd(x, y)或 之sin(3.4)类的表达式通常用于函数调用。

问题是,'dict' object is not callable如果我们写,为什么我们会得到消息d('a'),如果d是字典?为什么不说'dict' object is not a function

首先,当我们在 Python 中调用一个函数时,我们也说我们“调用了这个函数”。其次,Python 中有对象,它们像函数一样被“调用”,但严格来说不是函数。有“lambda 函数”,它们以不同的方式定义。也可以定义类,其中的实例可以像“常规”函数一样调用。这将通过增加另一个实现魔术方法__call__方法。

在我们介绍__call__方法之前,我们必须知道什么是可调用对象。一般来说,“可调用的”是一个可以像函数一样被调用并且表现得像一个函数的对象。所有函数也是可调用的。Python 提供了一个名为 的函数callable。借助这个函数,我们可以确定一个对象是否可调用。该函数callable返回一个布尔真值,该值指示作为参数传递的对象是否可以像函数一样被调用。除了函数,我们已经看到了另一种形式callables:类

def  the_answer ( question ): 
    return  42 
print ( "the_answer: " ,  callable ( the_answer ))

输出:

the_answer: 真的

__call__方法可用于将类的实例转换为可调用对象。函数是可调用的对象。一个可调用对象是一个可以使用并且表现得像一个函数但可能不是一个函数的对象。通过使用该__call__方法,可以以实例是可调用对象的方式定义类。__call__如果实例被称为“像函数一样”,即使用括号,则调用该方法。以下类定义是使用方法定义类的最简单的__call__方法。

class  FoodSupply : 
    def  __call__ ( self ): 
        return  "spam" 
foo  =  FoodSupply () 
bar  =  FoodSupply () 
print ( foo (),  bar ())

输出:

垃圾邮件

前面的类示例非常简单,但在实际中毫无用处。每当我们创建类的实例时,我们都会得到一个可调用对象。这些可调用对象始终定义相同的常量函数。没有任何输入和恒定输出“垃圾邮件”的功能。我们现在将定义一个稍微有用的类。让我们稍微改进一下这个例子:

 FoodSupply : 
    def  __init__ ( self ,  * incredients ): 
        self incredients  =  incredients 
    def  __call__ ( self ): 
        result  =  " " 加入(自我成分) +  “加上美味的垃圾邮件!” 
        返回 结果
f  =  FoodSupply ( "fish" ,  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值