Python的自省機制

2021-10-02 02:33:36 字數 1768 閱讀 8015

什麼是自省?

在日常生活中,自省(introspection)是一種自我檢查行為。

在計算機程式設計中,自省是指這種能力:檢查某些事物以確定它是什麼、它知道什麼以及它能做什麼。自省向程式設計師提供了極大的靈活性和控制力。

說的更簡單直白一點:自省就是物件導向的語言所寫的程式在執行時,能夠知道物件的型別。簡單一句就是,執行時能夠獲知物件的型別。

例如python, buby, object-c, c++都有自省的能力,這裡面的c++的自省的能力最弱,只能夠知道是什麼型別,而像python可以知道是什麼型別,還有什麼屬性。

最好的理解自省就是通過例子: type introspection 這裡是各種程式語言中自省(introspection)的例子(這個鏈結裡的例子很重要,也許你很難通過敘述理解什麼是introspection,但是通過這些例子,一下子你就可以理解了)

回到python,python中比較常見的自省(introspection)機制(函式用法)有: dir(),type(), hasattr(), isinstance(),通過這些函式,我們能夠在程式執行時得知物件的型別,判斷物件是否存在某個屬性,訪問物件的屬性。

dir()

dir() 函式可能是 python 自省機制中最著名的部分了。它返回傳遞給它的任何物件的屬性名稱經過排序的列表。如果不指定物件,則 dir() 返回當前作用域中的名稱。讓我們將 dir() 函式應用於 keyword 模組,並觀察它揭示了什麼:

>>

>

import keyword

>>

>

dir(keyword)

['__all__'

,'__builtins__'

,'__doc__'

,'__file__'

,'__name__'

,'__package__'

,'iskeyword'

,'kwlist'

,'main'

]

type()

type() 函式有助於我們確定物件是字串還是整數,或是其它型別的物件。它通過返回型別物件來做到這一點,可以將這個型別物件與 types 模組中定義的型別相比較:

'''

'''>>

>

type(42

)<

class

'int'

>

>>

>

type([

])<

class

'list'

>

hasattr()

物件擁有屬性,並且 dir() 函式會返回這些屬性的列表。但是,有時我們只想測試乙個或多個屬性是否存在。如果物件具有我們正在考慮的屬性,那麼通常希望只檢索該屬性。這個任務可以由 hasattr() 和 getattr() 函式來完成.

>>

>

hasattr(id

,'__doc__'

)true

isinstance()

可以使用 isinstance() 函式測試物件,以確定它是否是某個特定型別或定製類的例項:

>>

>

isinstance

("python"

,str

)true

Python自省機制

什麼是自省?在日常生活中,自省 introspection 是一種自我檢查行為。在計算機程式設計中,自省是指這種能力 檢查某些事物以確定它是什麼 它知道什麼以及它能做什麼。自省向程式設計師提供了極大的靈活性和控制力。最好的理解自省就是通過例子 type introspection 這裡是各種程式語言...

python的自省機制

1 自省 自省就是物件導向的語言所寫的程式在執行時,能夠知道物件的型別。簡單一句就是,執行時能夠獲知物件的型別。2 自省機制 自省機制通過函式實現,是乙個函式。例如python,buby,object c,c 都有自省的能力,這裡面的c 的自省的能力最弱,只能夠知道是什麼型別,而像python可以知...

Python中的自省機制 dict

一 定義 自省就是通過一定的機制查詢到物件的內部結構 class person name user class student person def init self,school name self.school name school name if name main user studen...