__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__()方法的執行結果;

