實例調用(__call__())

任何類,只須要定義一個__call__()方法,就可直接對實例進行調用
對實例進行直接調用就比如對一個函數進行調用同樣函數

__call__()還可定義參數,因此調用徹底能夠把對象當作函數,把函數當作對象,由於這二者之間原本就沒啥根本的區別
若是把對象當作函數,那麼函數自己其實也能夠在運行期動態建立出來,由於類的實例都是運行期建立出來的,所以也就模糊了對象和函數的界限

判斷變量是對象仍是函數
更多的時候,需判斷對象是否能被調用,若是對象能被調用,則該對象就是一個Callable對象
好比函數和上面定義的帶有__call__()的類實例,它們就是就是能被調用的,它們都是一個Callable對象
spa

    class Student(object):
        def __init__(self, name):
            self.name = name

        def __call__(self): 
            print('My name is %s.' % self.name)
            
    s = Student('Michael')
    s()    #輸出:My name is Michael.
    
    #經過callable()函數,能夠判斷一個對象是不是"可調用"對象
    callable(Student())  #True
    callable(max)  #True
    callable([1, 2, 3])  #False
    callable(None)  #False
    callable('str')  #False
相關文章
相關標籤/搜索