對(duì)python特殊函數(shù) __call__()的使用詳解
__call__
在Python中,函數(shù)其實(shí)是一個(gè)對(duì)象:
>>> f = abs >>> f.__name__ 'abs' >>> f(-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') 你無法確定 p 是一個(gè)函數(shù)還是一個(gè)類實(shí)例,所以,在Python中,函數(shù)也是對(duì)象,對(duì)象和函數(shù)的區(qū)別并不顯著。
任務(wù)
改進(jìn)一下前面定義的斐波那契數(shù)列:
class Fib(object): ???
請(qǐng)加一個(gè)__call__方法,讓調(diào)用更簡(jiǎn)單:
>>> f = Fib() >>> print f(10) [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
可以把實(shí)例對(duì)象用類似函數(shù)的形式表示,進(jìn)一步模糊了函數(shù)和對(duì)象之間的概念
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)
以上這篇對(duì)python特殊函數(shù) __call__()的使用詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 200行代碼實(shí)現(xiàn)一個(gè)滑動(dòng)驗(yàn)證碼過程詳解
這篇文章主要介紹了Python 200行代碼實(shí)現(xiàn)一個(gè)滑動(dòng)驗(yàn)證碼過程詳解,各種各樣的驗(yàn)證碼,比較高級(jí)的有滑動(dòng)、點(diǎn)選等樣式,看起來好像挺復(fù)雜的,但實(shí)際上它們的核心原理還是還是很清晰的,本文章大致說明下這些驗(yàn)證碼的原理以及帶大家實(shí)現(xiàn)一個(gè)滑動(dòng)驗(yàn)證碼2019-07-07Python多進(jìn)程與多線程的使用場(chǎng)景詳解
這篇文章主要給大家介紹了關(guān)于Python多進(jìn)程與多線程使用場(chǎng)景的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Python 如何修改程序默認(rèn)時(shí)區(qū)
這篇文章主要介紹了Python 如何修改程序默認(rèn)時(shí)區(qū),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Python中11種NumPy高級(jí)操作總結(jié)
熬夜整了了11種Numpy的高級(jí)操作,每一種都有參數(shù)解釋與小例子輔助說明。文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2022-05-05Python實(shí)現(xiàn)的刪除重復(fù)文件或圖片功能示例【去重】
這篇文章主要介紹了Python實(shí)現(xiàn)的刪除重復(fù)文件或圖片功能,結(jié)合實(shí)例形式分析了Python基于os與hashlib模塊針對(duì)文件的讀取、hash計(jì)算及重復(fù)性判定等相關(guān)操作技巧,需要的朋友可以參考下2019-04-04