面向对象__call__

Posted tf511

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象__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中,函数也是对象,对象和函数的区别并不显著。































以上是关于面向对象__call__的主要内容,如果未能解决你的问题,请参考以下文章

Python之路(第二十七篇) 面向对象进阶:内置方法描述符

python面向对象( item系列,__enter__ 和__exit__,__call__方法,元类)

31.Python面向对象str和repr原理魔法方法__call__和__new__方法单例模式

31.Python面向对象str和repr原理魔法方法__call__和__new__方法单例模式

Python面向对象-魔术方法

PHP面向对象魔术方法之__call函数