最新文章:

首页 Python

python中 __call__

发布时间:2017年07月20日 评论数:抢沙发 阅读数:207

    python中 __call__

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

    >>> f = abs
    >>> f.__name__
    'abs'
    >>> f(-123)
    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 __call__(self,num):
            a, b, L = 0, 1, []
            for n in range(num):
                L.append(a)
                a, b = b, a + b
            return L
    
    f = Fib()
    print f(10)
二维码加载中...
本文作者:HDC      文章标题: python中 __call__
本文地址:http://hdcin.cn/?post=276
版权声明:若无注明,本文皆为“小胖Blog's”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论