Python如何獲取模塊中類以及類的屬性方法信息
一、sys.modules模塊
sys.modules是一個全局字典,python啟動后就將該字典加載在內(nèi)存中,每當導(dǎo)入新的模塊時sys.modules都將記錄這些導(dǎo)入模塊。字典sys.modules對于加載模塊起到了緩沖的作用。
sys.modules擁有字典所擁有的一切方法。如:
import sys print(sys.modules[__name__]) print(sys.modules.values()) print(sys.modules.keys()) print(sys.modules.items()) #示例 print(sys.modules.get("demo2")) #輸出 <module 'demo3' from 'G:\\BaiXXXYuan\\BaiXXXXYuanApi\\demo3.py'>
二、inspect模塊
inspect模塊主要提供了四種用處:
1.對對象進行類型檢查
2.獲取源碼
3.獲取類或者函數(shù)的參數(shù)信息
4.解析堆棧
- inspect.getmembers(object[, predicate])
返回一個包含對象的所有成員(name, value)的列表。返回的內(nèi)容比對象的dict包含的內(nèi)容多,源碼是通過dir()實現(xiàn)的。
predicate是一個可選的函數(shù)參數(shù),只有predicate函數(shù)判斷為True的成員才被返回。
- predicate一般調(diào)用以下16個方法
inspect.ismodule(object): 是否為模塊 inspect.isclass(object):是否為類 inspect.ismethod(object):是否為方法(bound method written in python) inspect.isfunction(object):是否為函數(shù)(python function, including lambda expression) inspect.isgeneratorfunction(object):是否為python生成器函數(shù) inspect.isgenerator(object):是否為生成器 inspect.istraceback(object): 是否為traceback inspect.isframe(object):是否為frame inspect.iscode(object):是否為code inspect.isbuiltin(object):是否為built-in函數(shù)或built-in方法 inspect.isroutine(object):是否為用戶自定義或者built-in函數(shù)或方法 inspect.isabstract(object):是否為抽象基類 inspect.ismethoddescriptor(object):是否為方法標識符 inspect.isdatadescriptor(object):是否為數(shù)字標識符,數(shù)字標識符有__get__ 和__set__屬性; 通常也有__name__和__doc__屬性 inspect.isgetsetdescriptor(object):是否為getset descriptor inspect.ismemberdescriptor(object):是否為member descriptor
inspect其他方法
inspect.getdoc(object): 獲取object的documentation信息 inspect.getcomments(object) inspect.getfile(object): 返回對象的文件名 inspect.getmodule(object):返回object所屬的模塊名 inspect.getsourcefile(object): 返回object的python源文件名;object不能使built-in的module, class, mothod inspect.getsourcelines(object):返回object的python源文件代碼的內(nèi)容,行號+代碼行 inspect.getsource(object):以string形式返回object的源代碼 inspect.cleandoc(doc):
三、python獲取模塊中所有類的實例
demo2文件
class A(): def __init__(self): self.A = "A" ? def run(self): print(self.A)
demo3文件
class D(): def __init__(self): self.D = "D" ? def d(self): print(self.D)
demo文件
from demo import A import demo2 import inspect import sys ? ? class B(A): ? def __init__(self): self.B1 = "B" ? def run(self): print(self.B1) ? ? class C(A): ? def __init__(self): self.C1 = "C" ? def run(self): print(self.C1) ? ? if __name__ == '__main__': print(sys.modules.get("demo3")) class_list = [] print(inspect.getmembers(sys.modules[__name__], inspect.isclass)) print(inspect.getmembers(sys.modules.get("demo3"), inspect.isclass)) for name, class_ in inspect.getmembers(sys.modules[__name__], inspect.isclass): class_list.append(class_) class_().run() ? print(class_list) ? ? #輸出 <module 'demo3' from 'G:\\BaiGuoYuan\\BaiGuoYuanApi\\demo3.py'> [('A', <class 'demo2.A'>), ('B', <class '__main__.B'>), ('C', <class '__main__.C'>)] [('D', <class 'demo3.D'>)] A B C [<class 'demo2.A'>, <class '__main__.B'>, <class '__main__.C'>]
總結(jié)
到此這篇關(guān)于Python如何獲取模塊中類以及類的屬性方法信息的文章就介紹到這了,更多相關(guān)Python獲取模塊中類及屬性方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python mysql實現(xiàn)學(xué)生成績管理系統(tǒng)
這篇文章主要為大家詳細介紹了python mysql實現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10opencv python統(tǒng)計及繪制直方圖的方法
這篇文章主要介紹了opencv python統(tǒng)計及繪制直方圖的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01Python api構(gòu)建tensorrt加速模型的步驟詳解
小編個人認為python比c++更容易讀并且已經(jīng)有很多包裝很好的科學(xué)運算庫(numpy,scikit等),今天通過本文給大家分享Python api構(gòu)建tensorrt加速模型的步驟,感興趣的朋友一起看看吧2021-09-09解決python 讀取excel時 日期變成數(shù)字并加.0的問題
這篇文章主要介紹了python 讀取excel時, 日期變成數(shù)字并加.0的問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10