當我們拿到乙個物件的引用時,如何知道這個物件是什麼型別、有哪些方法呢?
首先,我們來判斷物件型別,使用type()
函式:
基本型別都可以用type()
判斷:
>>> type(123)
>>> type('str')
>>> type(none)
如果乙個變數指向函式或者類,也可以用type()
判斷:
>>> type(abs)
>>> type(a)
但是type()
函式返回的是什麼型別呢?它返回type型別。
python把每種type型別都定義好了常量,放在types
模組裡,使用之前,需要先導入:
>>>
import types
>>> type('abc')==types.stringtype
true
>>> type(u'abc')==types.unicodetype
true
>>> type()==types.listtype
true
>>> type(str)==types.typetype
true
最後注意到有一種型別就叫typetype
,所有型別本身的型別就是typetype
,比如:
>>> type(int)==type(str)==types.typetype
true
對於class的繼承關係來說,使用type()就很不方便。我們要判斷class的型別,可以使用isinstance()
函式。
我們回顧上次的例子,如果繼承關係是:
object -> animal -> dog -> husky
那麼,isinstance()
就可以告訴我們,乙個物件是否是某種型別。先建立3種型別的物件:
>>> a = animal()
>>> d = dog()
>>> h = husky()
然後,判斷:
>>> isinstance(h, husky)
true
沒有問題,因為h
變數指向的就是husky物件。
再判斷:
>>> isinstance(h, dog)
true
實際型別是dog的d
也是animal型別:
>>> isinstance(d, dog) and isinstance(d, animal)
true
能用type()
判斷的基本型別也可以用isinstance()
判斷:
>>> isinstance('a', str)
true
>>> isinstance(u'a', unicode)
true
>>> isinstance('a', unicode)
false
並且還可以判斷乙個變數是否是某些型別中的一種,比如下面的**就可以判斷是否是str或者unicode:
>>> isinstance('a', (str, unicode))
true
>>> isinstance(u'a', (str, unicode))
true
由於str
和unicode
都是從basestring
繼承下來的,所以,還可以把上面的**簡化為:
>>> isinstance(u'a', basestring)
true
類似__***__
的屬性和方法在python中都是有特殊用途的,比如__len__
方法返回長度。在python中,如果你呼叫len()
函式試圖獲取乙個物件的長度,實際上,在len()
函式內部,它自動去呼叫該物件的__len__()
方法,所以,下面的**是等價的:
>>> len('abc')
3>>>
'abc'.__len__()
3
我們自己寫的類,如果也想用len(myobj)
的話,就自己寫乙個__len__()
方法:
>>>
class
myobject
(object):
...
def__len__
(self):
...
return
100...
>>> obj = myobject()
>>> len(obj)
100
筆記 python獲取物件資訊
拿到乙個物件的引用時,如何知道這個物件是什麼型別 有哪些方法?目錄 type isinstance dir type 函式返回對應的class型別。判斷乙個物件是否是函式用types模組中的各種型別作對比。import types def fn pass type fn types.function...
學習筆記 獲取物件資訊
學習日期 2016年9月27日 學習課程 獲取物件資訊 廖雪峰的官方 在本節中,我學習了可以通過type 或者isinstance 可以獲得和判斷物件的型別資訊,他們兩者的不同,在於type 不會認為子類是一種父類型別,isinstance 會認為子類是一種父類型別。還學習了使用dir 可以獲得乙個...
Python3學習筆記12 獲取物件型別
當我們拿到乙個對物件的引用時,如何知道這個物件是什麼型別,有哪些方法呢?使用type 首先,我們來判斷物件型別,使用type 函式 基本型別都可以用type 判斷 如果乙個變數指向函式或者類,也可以用type 判斷 但是type 函式返回的是什麼型別呢?它返回對應的class型別。如果我們要在if語...