什麼是自省?
在日常生活中,自省(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...