对python特殊函数 __call__()的使用详解

 更新时间:2019年07月02日 09:12:58   作者:超级学渣渣  
今天小编就为大家分享一篇对python特殊函数 __call__()的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

__call__

在Python中,函数其实是一个对象:

>>> f = abs
>>> f.__name__
'abs'
>>> f(-123)

由于 f 可以被调用,所以,f 被称为可调用对象。

所有的函数都是可调用对象。

一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。

我们把 Person 类变成一个可调用对象:

class Person(object):
  def __init__(self, name, gender):
    self.name = name
    self.gender = gender

  def __call__(self, friend):
    print 'My name is %s...' % self.name
    print 'My friend is %s...' % friend

现在可以对 Person 实例直接调用:

>>> p = Person('Bob', 'male')
>>> p('Tim')
My name is Bob...
My friend is Tim...

单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著。

任务

改进一下前面定义的斐波那契数列:

class Fib(object):
  ???

请加一个__call__方法,让调用更简单:

>>> f = Fib()
>>> print f(10)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

可以把实例对象用类似函数的形式表示,进一步模糊了函数和对象之间的概念

class Fib(object):
  def __init__(self):
    pass
  def __call__(self,num):
    a,b = 0,1;
    self.l=[]
    
    for i in range (num):
      self.l.append(a)
      a,b= b,a+b
    return self.l
  def __str__(self):
    return str(self.l)
  __rept__=__str__
      
f = Fib()
print f(10)

以上这篇对python特殊函数 __call__()的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python Copula 实现绘制散点模型

    python Copula 实现绘制散点模型

    这篇文章主要介绍了python Copula实现绘制散点模型,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • Python requests发送post请求的一些疑点

    Python requests发送post请求的一些疑点

    在Python爬虫中,使用requests发送请求,访问指定网站,是常见的做法,这篇文章主要介绍了Python requests发送post请求的一些疑点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Python pygame项目实战英雄动画特效实现

    Python pygame项目实战英雄动画特效实现

    这篇文章主要为大家介绍了Python pygame项目实战英雄动画特效实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • python画一个玫瑰和一个爱心

    python画一个玫瑰和一个爱心

    这篇文章主要教大家用python画一个玫瑰和一个爱心,作为女生节礼物,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • python多线程案例之多任务copy文件完整实例

    python多线程案例之多任务copy文件完整实例

    这篇文章主要介绍了python多线程案例之多任务copy文件,结合完整实例形式分析了Python使用multiprocessing模块实现基于多线程的文件拷贝相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • Python解析CDD文件的代码详解

    Python解析CDD文件的代码详解

    这篇文章主要介绍了Python解析CDD文件的方法,使用Python 脚本解析CDD文件,统一定义,一键生成,十分快捷,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • python单元测试框架pytest介绍

    python单元测试框架pytest介绍

    这篇文章介绍了python的单元测试框架pytest,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 浅谈Python 字符串格式化输出(format/printf)

    浅谈Python 字符串格式化输出(format/printf)

    下面小编就为大家带来一篇浅谈Python 字符串格式化输出(format/printf)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • python使用正则搜索字符串或文件中的浮点数代码实例

    python使用正则搜索字符串或文件中的浮点数代码实例

    这篇文章主要介绍了python使用正则搜索字符串或文件中的浮点数代码实例,同时包含一个读写到文件功能,需要的朋友可以参考下
    2014-07-07
  • python实现感知器算法(批处理)

    python实现感知器算法(批处理)

    这篇文章主要为大家详细介绍了python实现感知器算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01

最新评论