Python 的對象天生擁有一些神奇的方法,它們總被雙下劃線所包圍,它們是面向對象的 Python 的一切。它們是可以給你的類增加魔力的特殊方法,如果你的對象實現(重載)了某一個魔法方法,那麼這個方法就會在特殊的情況下自動被 Python 所調用。
允許並定義一個對象像函數一樣被調用時的行為。
self 表示對象本身,args 和 kwargs 表示兩個不定長參數。
任意數量和類型的對象。
class MyText(object):
def __call__(self, *args, **kwargs):
my_sum = 0
for item in args:
my_sum += item
return my_sum
sample = MyText()
print(sample(1, 2, 3, 4, 5))
__call__()是一種 magic method,在類中實現這一方法可以使該類的實例(對象)像函數一樣被調用。默認情況下該方法在類中是沒有被實現的。使用 callable() 方法可以判斷某對象是否可以被調用。
__call__() 方法的作用其實是把一個類的實例化對象變成了可調用對象,也就是說把一個類的實例化對象變成了可調用對象,只要類裡實現了 __call__() 方法就行。
class People(object):
def __init__(self, name):
self.name = name
def __call__(self):
print("hello " + self.name)
a = People('無忌!')
a.__call__() # 調用方法一
a() # 調用方法二
在編寫類的時候,如果寫了 __call__() 方法,在實例化的對象進行調用的時候就會有 實例對象點__call__() 和 object() 這兩種使用方式效果一樣的現象,即調用方法一和調用方法二效果一樣。