在Python中,函數(shù)其實(shí)是一個(gè)對(duì)象:
>>> f = abs
>>> f.__name__
'abs'
>>> f(-123)
123
由于f可以被調(diào)用,所以颤芬,f被稱為可調(diào)用對(duì)象。
所有的函數(shù)都是可調(diào)用對(duì)象。
一個(gè)類實(shí)例也可以變成一個(gè)可調(diào)用對(duì)象幸海,只需要實(shí)現(xiàn)一個(gè)特殊方法__call__()蜡歹。
我們把Person類變成一個(gè)可調(diào)用對(duì)象:
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
現(xiàn)在可以對(duì)Person實(shí)例直接調(diào)用:
>>> p = Person('Bob', 'male')
>>> p('Tim')
My name is Bob...
My friend is Tim...
單看p('Tim')你無(wú)法確定p是一個(gè)函數(shù)還是一個(gè)類實(shí)例,所以涕烧,在Python中月而,函數(shù)也是對(duì)象,對(duì)象和函數(shù)的區(qū)別并不顯著议纯。