Python中的__init__()和__call__()函式
阿新 • • 發佈:2019-01-22
在Python的class中有一些函式往往具有特殊的意義。__init__()
和__call__()
就是class很有用的兩類特殊的函式。
__init__()
在Python中,__init__()
函式的意義等同於類的構造器(同理,__del__()
等同於類的解構函式)。因此,__init__()
方法的作用是建立一個類的例項。
__call__()
Python中的函式是一級物件。這意味著Python中的函式的引用可以作為輸入傳遞到其他的函式/方法中,並在其中被執行。
而Python中類的例項(物件)可以被當做函式對待。也就是說,我們可以將它們作為輸入傳遞到其他的函式/方法中並呼叫他們,正如我們呼叫一個正常的函式那樣。而類中__call__()
__call__()
方法。也就是我們要在類中實現如下方法:def __call__(self, *args)
。這個方法接受一定數量的變數作為輸入。 假設x是X類的一個例項。那麼呼叫
x.__call__(1,2)
等同於呼叫x(1,2)
。這個例項本身在這裡相當於一個函式。
總結
那麼,__init__()
和__call__()
的區別如下:
1. __init__()
的作用是初始化某個類的一個例項。
2. __call__()
的作用是使例項能夠像函式一樣被呼叫,同時不影響例項本身的生命週期(__call__()
不影響一個例項的構造和析構)。但是__call__()
class X(object):
def __init__(self, a, b, range):
self.a = a
self.b = b
self.range = range
def __call__(self, a, b):
self.a = a
self.b = b
print('__call__ with ({}, {})'.format(self.a, self.b))
def __del__(self, a, b, range) :
del self.a
del self.b
del self.range
>>> xInstance = X(1, 2, 3)
>>> xInstance(1,2)
__call__ with (1, 2)