__call__()的用法
__call__()方法能夠讓類的實例對象,像函數一樣被調用;
>>> >>> class A(object): def __call__(self, x): print('__call__ called, print x: ', x) >>> >>> a = A() >>> a('123') __call__ called, print x: 123 >>>
看a('123')這是函數的調用方法,這里a實際上是類對象A的實例對象,實例對象能想函數一樣傳參並被調用,就是__call__()方法的功能;
接下來用一段簡單的代碼,來總體感受一下三個方法的用法和區別:
>>> >>> class A(object): def __init__(self, x): print ('x in __init__', x) def __new__(cls, y): print 'y in __new__', y return super(A, cls).__new__(cls) def __call__(self, z): print( 'z in __call__', z) >>> >>> A('123')('abc') y in __new__ 123 x in __init__ 123 z in __call__ abc >>>
由執行結果可以看出,雖然__init__()方法定義在__new__()方法之前,但是結果中先展示了__new__()方法的執行結果;