什么是python的自省
什么是自省?
在日常生活中,自?。╥ntrospection)是一種自我檢查行為。
在計(jì)算機(jī)編程中,自省是指這種能力:檢查某些事物以確定它是什么、它知道什么以及它能做什么。自省向程序員提供了極大的靈活性和控制力。
說(shuō)的更簡(jiǎn)單直白一點(diǎn):自省就是面向?qū)ο蟮恼Z(yǔ)言所寫(xiě)的程序在運(yùn)行時(shí),能夠知道對(duì)象的類(lèi)型。簡(jiǎn)單一句就是,運(yùn)行時(shí)能夠獲知對(duì)象的類(lèi)型。
例如python, buby, object-C, c++都有自省的能力,這里面的c++的自省的能力最弱,只能夠知道是什么類(lèi)型,而像python可以知道是什么類(lèi)型,還有什么屬性。
最好的理解自省就是通過(guò)例子: Type introspection 這里是各種編程語(yǔ)言中自?。╥ntrospection)的例子(這個(gè)鏈接里的例子很重要,也許你很難通過(guò)敘述理解什么是introspection,但是通過(guò)這些例子,一下子你就可以理解了)
回到Python,Python中比較常見(jiàn)的自?。╥ntrospection)機(jī)制(函數(shù)用法)有: dir(),type(), hasattr(), isinstance(),通過(guò)這些函數(shù),我們能夠在程序運(yùn)行時(shí)得知對(duì)象的類(lèi)型,判斷對(duì)象是否存在某個(gè)屬性,訪問(wèn)對(duì)象的屬性。
dir()
dir() 函數(shù)可能是 Python 自省機(jī)制中最著名的部分了。它返回傳遞給它的任何對(duì)象的屬性名稱(chēng)經(jīng)過(guò)排序的列表。如果不指定對(duì)象,則 dir() 返回當(dāng)前作用域中的名稱(chēng)。讓我們將 dir() 函數(shù)應(yīng)用于 keyword 模塊,并觀察它揭示了什么:
>>> import keyword >>> dir(keyword) ['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'iskeyword', 'kwlist', 'main']
type()
type() 函數(shù)有助于我們確定對(duì)象是字符串還是整數(shù),或是其它類(lèi)型的對(duì)象。它通過(guò)返回類(lèi)型對(duì)象來(lái)做到這一點(diǎn),可以將這個(gè)類(lèi)型對(duì)象與 types 模塊中定義的類(lèi)型相比較:
>>> type(42)<class 'int'> >>> type([])<class 'list'>
isinstance()
可以使用 isinstance() 函數(shù)測(cè)試對(duì)象,以確定它是否是某個(gè)特定類(lèi)型或定制類(lèi)的實(shí)例:
>>> isinstance("python", str) True
python自省中help用法擴(kuò)展:
打開(kāi)python的IDLE,就進(jìn)入到了python解釋器中,python解釋器本身是被認(rèn)為是一個(gè)主模塊,然后在解釋器提示符>>>下輸入一些我們想了解的信息,所以首先我們會(huì)先尋求幫助,所以輸入help,接著輸入help(),我們就進(jìn)入了help utility,然后循著提示keywords,modules,以了解python的關(guān)鍵字以及python自帶的或者我們額外安裝和定義的模塊,如果要退出,輸入'q',然后回車(chē)。
如果我們想了解某個(gè)對(duì)象(python里面所有對(duì)象都可以認(rèn)為是對(duì)象),也可以求助也help(),不過(guò)要在括號(hào)里輸入對(duì)象的名稱(chēng),格式help(object),例如help(print),鑒于對(duì)象的自省內(nèi)容太多,有的只粘貼出部分內(nèi)容。
>>> help Type help() for interactive help, or help(object) for help about object. >>> help() Welcome to Python 3.6's help utility! If this is your first time using Python, you should definitely check out the tutorial on the Internet at https://docs.python.org/3.6/tutorial/. Enter the name of any module, keyword, or topic to get help on writing Python programs and using Python modules. To quit this help utility and return to the interpreter, just type "quit". ... help> keywords Here is a list of the Python keywords. Enter any keyword to get more help. False def if raise None del import return True elif in try and else is while as except lambda with assert finally nonlocal yield break for not class from or continue global pass help> modules Please wait a moment while I gather a list of all available modules... PIL base64 idlelib runpy __future__ bdb idna runscript __main__ binascii idna_ssl sched _ast binhex imaplib scrolledlist _asyncio bisect imghdr search _bisect browser imp ... Enter any module name to get more help. Or, type "modules spam" to search for modules whose name or summary contain the string "spam". >>> help('print') Help on built-in function print in module builtins: print(...) print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. flush: whether to forcibly flush the stream.
到此這篇關(guān)于什么是python的自省的文章就介紹到這了,更多相關(guān)python自省是什么內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
15行Python代碼實(shí)現(xiàn)免費(fèi)發(fā)送手機(jī)短信推送消息功能
這篇文章主要介紹了通過(guò)15行Python代碼實(shí)現(xiàn)免費(fèi)發(fā)送手機(jī)短信推送消息功能,通過(guò)實(shí)例代碼截圖的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02python基礎(chǔ)教程之簡(jiǎn)單入門(mén)說(shuō)明(變量和控制語(yǔ)言使用方法)
這篇文章主要介紹了開(kāi)始學(xué)習(xí)python的第一步需要知道的知識(shí)(變量和控制語(yǔ)言使用方法),需要的朋友可以參考下2014-03-03Python 的七個(gè)HTTP請(qǐng)求庫(kù)對(duì)比小結(jié)
本文主要介紹了Python 的七個(gè)HTTP請(qǐng)求庫(kù)對(duì)比小結(jié),文中通過(guò)圖表,示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06Python入門(mén)教程(二十)Python的Lambda表達(dá)式
這篇文章主要介紹了Python入門(mén)教程(二十)Python的Lambda表達(dá)式,lambda表達(dá)式是一行的函數(shù)。它們?cè)谄渌Z(yǔ)言中也被稱(chēng)為匿名函數(shù),lambda表達(dá)式非常有用,可以讓代碼簡(jiǎn)單,簡(jiǎn)潔,需要的朋友可以參考下2023-04-04Python RPA自動(dòng)化機(jī)器人模擬鼠標(biāo)鍵盤(pán)
這篇文章主要介紹了Python RPA自動(dòng)化機(jī)器人模擬鼠標(biāo)鍵盤(pán),RPA,全稱(chēng)為Robotic Process Automation,即機(jī)器人流程自動(dòng)化。我們可以利用RPA技術(shù)將工作中可重復(fù)的部分流程化,讓機(jī)器替我們完成這一工作2023-02-02python開(kāi)發(fā)之Docker入門(mén)安裝部署教程
這篇文章是一篇入門(mén)篇,主要給大家介紹了關(guān)于python開(kāi)發(fā)中的Docker安裝部署,圖文方式展示了安裝的過(guò)程步驟,有需要的朋友可以參考下2021-09-09python實(shí)現(xiàn)商品進(jìn)銷(xiāo)存管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)商品進(jìn)銷(xiāo)存管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05python學(xué)習(xí)與數(shù)據(jù)挖掘應(yīng)知應(yīng)會(huì)的十大終端命令
今天我們將介紹一些基本的數(shù)據(jù)收集、探索和聚合—所有這些都是通過(guò)shell完成的。如果你使用的是Linux或Mac,那么接下來(lái)就不會(huì)有任何問(wèn)題,但是Windows用戶應(yīng)該在繼續(xù)之前下載一個(gè)終端仿真器2021-11-11