码迷,mamicode.com
首页 > 编程语言 > 详细

python中的__call__()函数

时间:2017-10-12 12:07:09      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:实现   size   font   方法   def   span   pytho   object   区别   

__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中,函数也是对象,对象和函数的区别并不显著。

eg:
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__()函数

标签:实现   size   font   方法   def   span   pytho   object   区别   

原文地址:http://www.cnblogs.com/nkh222/p/7655298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!