任何類,只需要定義乙個__call__()方法,就可直接對例項進行呼叫
對例項進行直接呼叫就好比對乙個函式進行呼叫一樣
__call__()還可定義引數,所以呼叫完全可以把物件看成函式,把函式看成物件,因為這兩者之間本來就沒啥根本的區別
如果把物件看成函式,那麼函式本身其實也可以在執行期動態建立出來,因為類的例項都是執行期建立出來的,因此也就模糊了物件和函式的界限
判斷變數是物件還是函式
更多的時候,需判斷物件是否能被呼叫,如果物件能被呼叫,則該物件就是乙個callable物件
比如函式和上面定義的帶有__call__()的類例項,它們就是就是能被呼叫的,它們都是乙個callable物件
classstudent(object):
def__init__
(self, name):
self.name =name
def__call__
(self):
print('
my name is %s.
' %self.name)
s = student('
michael')
s()
#輸出:my name is michael.
#通過callable()函式,可以判斷乙個物件是否是"可呼叫"物件
callable(student()) #
true
callable(max) #
true
callable([1, 2, 3]) #
false
callable(none) #
false
callable('
str') #
false
call 處理呼叫錯誤
在程式開發中,如果在使用物件呼叫物件內部方法時候,呼叫的這個方法不存在那麼程式就會出錯,然後程式退出不能繼續執行。那麼可不可以在程式呼叫物件內部不存在的方法時,提示我們呼叫的方法及使用的引數不存在,但程式還可以繼續執行,這個時候我們就要使用在呼叫不存在的方法時自動呼叫的方法 call 片斷 上例出現...
函式呼叫 通過apply和call方法呼叫
不同型別函式呼叫之間的主要區別在於 最終作為函式上下文 可以通過this引數隱式引用到 傳遞給執行函式物件不同。對於方法而言,即為所在的物件 對於函式而言是window或是undefined 取決於是否處於嚴格模式下 對於建構函式而言是乙個新建立的物件例項。click me 在這個例子中,我們定義了...
呼叫precedure時call和exec的區別
1 exec 只能在sqlplus中使用,call可以在任何地方使用。2 call必須有括號,即例沒有引數 idle connect as sysdba 已連線。sys po10 sys po10 create procedure p test is 2 begin 3 null 4 end 5 過...