python學習筆記 獲取物件資訊

2021-07-24 10:08:28 字數 2647 閱讀 5950

當我們拿到乙個物件的引用時,如何知道這個物件是什麼型別、有哪些方法呢?

首先,我們來判斷物件型別,使用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

由於strunicode都是從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語...