python2 有一種比較可靠的方式就是判斷物件的型別是否是file
型別。因此可以使用type
函式或者isinstance
函式實現。
當然type函式無法對繼承得來的子類起作用
>>> f = open('./text', 'w')
>>> type(f)
>>> type(f) == file
true
>>> class myfile(file):
... pass
...>>> mf = myfile('./text')
>>> type(mf)
>>> type(mf) == file
false
isinstancne
是推薦的判斷型別時方法,通常情況下都應該選擇此方法。isinstance
也可以對子類起作用。
>>> f = open('./text', 'w')
>>> isinstance(f, file)
true
>>> class myfile(file):
... pass
...>>> mf = myfile('./text')
>>> isinstance(mf, file)
true
在 python3 中,官方取消了file
這一物件型別,使得 python2 中的判斷方法無法在 python3 中使用。
因此在 python3 中只能通過鴨子型別的概念判斷物件是否實現了可呼叫的``read
,write
,close
方法, 來判斷物件是否是乙個檔案物件了。
def isfilelike(f):
try:
if isinstance(getattr(f, "read"), collections.callable) \
and isinstance(getattr(f, "write"), collections.callable) \
and isinstance(getattr(f, "close"), collections.callable):
return true
except attributeerror:
pass
return false
當然這個方法也可以在 python2 中使用 判斷物件是否是空物件
object.keys 方法會返回乙個由乙個給定物件的自身可列舉屬性組成的陣列。通過陣列中屬性的個數判斷是否為空物件。const empty object.keys empty length 0 empty.constructor object 而且需要判斷物件的constructor屬性是否等於o...
如何判斷物件是否死亡
主要的方法分為兩種 引用計數演算法和可達性分析演算法,目前常用的就是可達性分析演算法 對乙個物件新增乙個引用的計數器,當該物件被引用依次那麼計數器 1,如果引用被釋放,那麼計數器 1,這樣根據物件最終引用次數為0時,將該物件 缺點 當兩個物件互相的引用,引用計數器就無法得到為0,那麼也就無將物件就行...
如何判斷Java物件是否存活
該種方法是每乙個物件有乙個引用計數屬性,新增乙個引用時計數加1,引用釋放時計數減1,計數為0時表示沒用引用,則代表該物件可以 這種方法簡單,但是無法解決物件相互迴圈引用的問題。該種方法是從gc roots開始向下搜尋,搜尋所走過的路徑為引用鏈。當乙個物件到gc roots沒用任何引用鏈時,則證明此物...