__call()__ 的作用
使得類實例對象可以像普通函數那樣被調用
實際栗子
from typing import Callable class PoloBlog: def __init__(self, name): self.name = name def __call__(self, *args, **kwargs): print(self.name) print(args) print(kwargs) blog = PoloBlog("小菠蘿") blog(1, 2, 3, age=24, sex="girl") print(isinstance(blog, Callable)) # 輸出結果 小菠蘿 (1, 2, 3) {'age': 24, 'sex': 'girl'} True
- blog() 就像普通函數一樣,可以直接執行
- blog 實例對象就是一個可調用對象
什么是可調用對象
- Python 中,可以通過 對象() 執行成功的對象,都稱為可調用對象
- 可調用對象包括自定義的函數、Python 內置函數、上面說的實現了 __call__ 的類實例對象
可以通過 isinstance 來判斷是不是可調用對象
from typing Callable isinstance(對象, Callable)
自定義函數的栗子
def say(): print("小菠蘿測試筆記") # 調用自定義函數的兩種方式 say() # 常見的方式 say.__call__() # 輸出結果 小菠蘿測試筆記 小菠蘿測試筆記
類實例方法的栗子
class A: def say(self): print("小菠蘿測試筆記") a = A() a.say() a.say.__call__() # 輸出結果 小菠蘿測試筆記 小菠蘿測試筆記
總結
- 對象() 還是常用的可調用對象的執行方式
- 對象.__call__() 作為了解補充即可
