拿到乙個物件的引用時,如何知道這個物件是什麼型別、有哪些方法?
目錄
type()
isinstance()
dir()
type()函式返回對應的class型別。判斷乙個物件是否是函式用types模組中的各種型別作對比。
>>> import types
>>> def fn():
... pass
...>>> type(fn)==types.functiontype
true
>>> type(abs)==types.builtinfunctiontype
true
>>> type(lambda x: x)==types.lambdatype
true
>>> type((x for x in range(10)))==types.generatortype
true
要判斷class的型別,可以使用isinstance()
函式。isinstance()
判斷的是乙個物件是否是該型別本身,或者位於該型別的父繼承鏈上。
如這裡student是person的子類:
可以看到stu1既是student類,又是person類;person1只是person類,不是student類
還可以判斷乙個變數是否是某些型別中的一種:
通過內建的一系列函式,我們可以對任意乙個python物件進行剖析,拿到其內部的資料。
要獲得乙個物件的所有屬性和方法,可以使用dir()
函式,它返回乙個包含字串的list,包含了該物件的所有屬性和方法。
>>> dir('abc')
['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']
類似__***__
的屬性和方法在python中都是有特殊用途的,比如__len__
方法返回長度。在python中,如果你呼叫len()
函式試圖獲取乙個物件的長度,實際上,在len()
函式內部,它自動去呼叫該物件的__len__()
方法。
合getattr()
、setattr()
以及hasattr()
,我們可以直接操作乙個物件的狀態。
hasattr(obj,'a') 判斷obj物件是否有屬性/方法a (注意,不能判斷出私有屬性/方法)如下,person1物件的屬性主要有 'high',方法主要有'print_name', 'print_age',執行結果入下getattr(obj,'a') 獲取obj物件的屬性/方法a的值(如果獲取乙個不存在的屬性/方法,會返回乙個錯誤attributeerror。為避免出錯導致程式停止,可以傳入乙個default引數 getattr(obj, 'a', 404),如果屬性/方法a不存在,就返回預設值404)
setattr(obj,'a',100) 設定obj物件的屬性/方法a的值
python學習筆記 獲取物件資訊
當我們拿到乙個物件的引用時,如何知道這個物件是什麼型別 有哪些方法呢?首先,我們來判斷物件型別,使用type 函式 基本型別都可以用type 判斷 type 123 type str type none 如果乙個變數指向函式或者類,也可以用type 判斷 type abs type a 但是type...
python 獲取物件資訊
判斷物件型別,使用type 函式 判斷乙個物件是否是函式 使用types模組中定義的常量 import types type abs types.builtinfunctiontype true type lambda x x types.lambdatype true type x for x i...
學習筆記 獲取物件資訊
學習日期 2016年9月27日 學習課程 獲取物件資訊 廖雪峰的官方 在本節中,我學習了可以通過type 或者isinstance 可以獲得和判斷物件的型別資訊,他們兩者的不同,在於type 不會認為子類是一種父類型別,isinstance 會認為子類是一種父類型別。還學習了使用dir 可以獲得乙個...