例項呼叫 call

2022-06-25 13:48:11 字數 882 閱讀 4696

任何類,只需要定義乙個__call__()方法,就可直接對例項進行呼叫

對例項進行直接呼叫就好比對乙個函式進行呼叫一樣

__call__()還可定義引數,所以呼叫完全可以把物件看成函式,把函式看成物件,因為這兩者之間本來就沒啥根本的區別

如果把物件看成函式,那麼函式本身其實也可以在執行期動態建立出來,因為類的例項都是執行期建立出來的,因此也就模糊了物件和函式的界限

判斷變數是物件還是函式

更多的時候,需判斷物件是否能被呼叫,如果物件能被呼叫,則該物件就是乙個callable物件

比如函式和上面定義的帶有__call__()的類例項,它們就是就是能被呼叫的,它們都是乙個callable物件

class

student(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 過...