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)
    
    
  • 相关阅读:
    iota妙用
    io
    http
    gosched
    go设置使用多少个cpu
    go协程的特点
    go条件变量同步机制
    Go奇技淫巧
    U5首次登录
    Maven安装中的问题
  • 原文地址:https://www.cnblogs.com/nkh222/p/7655298.html
Copyright © 2011-2022 走看看