zoukankan      html  css  js  c++  java
  • python中的__call__()函数

    __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)
    
    
  • 相关阅读:
    技术一定要动手做一遍才算自已的
    终于提离职了,感觉如释重负
    自我评定与学习计划
    MYSQL---INSERT...SELECT...
    MYSQL---LIMIT
    SQL---having
    MYSQL---数据定义
    CSS---Block和inline元素对比
    CSS---清除浮动
    T-SQL---分页语句
  • 原文地址:https://www.cnblogs.com/nkh222/p/7655298.html
Copyright © 2011-2022 走看看