在Python中获取模块里类的属性怎样实现
Admin 2022-06-20 群英技术资讯 728 次浏览
在这篇文章中,我们来学习一下“在Python中获取模块里类的属性怎样实现”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大家跟着小编的思路一起来学习一下吧。sys.modules是一个全局字典,python启动后就将该字典加载在内存中,每当导入新的模块时sys.modules都将记录这些导入模块。字典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模块主要提供了四种用处:
1.对对象进行类型检查
2.获取源码
3.获取类或者函数的参数信息
4.解析堆栈
返回一个包含对象的所有成员(name, value)的列表。返回的内容比对象的dict包含的内容多,源码是通过dir()实现的。
predicate是一个可选的函数参数,只有predicate函数判断为True的成员才被返回。
inspect.ismodule(object): 是否为模块 inspect.isclass(object):是否为类 inspect.ismethod(object):是否为方法(bound method written in python) inspect.isfunction(object):是否为函数(python function, including lambda expression) inspect.isgeneratorfunction(object):是否为python生成器函数 inspect.isgenerator(object):是否为生成器 inspect.istraceback(object): 是否为traceback inspect.isframe(object):是否为frame inspect.iscode(object):是否为code inspect.isbuiltin(object):是否为built-in函数或built-in方法 inspect.isroutine(object):是否为用户自定义或者built-in函数或方法 inspect.isabstract(object):是否为抽象基类 inspect.ismethoddescriptor(object):是否为方法标识符 inspect.isdatadescriptor(object):是否为数字标识符,数字标识符有__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源文件代码的内容,行号+代码行 inspect.getsource(object):以string形式返回object的源代码 inspect.cleandoc(doc):
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'>]
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
吃豆人和切水果这两个游戏相信大家都不陌生吧,本文将利用Python中的Pygame模块编写出一款结合吃豆人+切水果的新游戏:疯狂吃水果,感兴趣的可以了解一下
日常工作中有许多类型的文件,以及许多方法,用它们从文件中提取数据来图形化。本文将利用Python实现从文件中加载数据,感兴趣的可以了解一下
很多朋友应该都有看到过,很多小图片拼接成为一个完整大图片的这样的效果,那么这是怎么做的呢?下面小编就给大家分享使用python来实现固定尺寸图像拼接。感兴趣的朋友可以参考学习。
大家都知道concat()函数可以沿着一条轴将多个对象进行堆叠,其使用方式类似数据库中的数据表合并,在使用merge()函数进行合并时,默认会使用重叠的列索引做为合并键,即取行索引重叠的部分,本文给大家介绍python 数据合并concat函数与merge函数,感兴趣的朋友一起看看吧
列表 List列表是有序的列表可以包含任意对象通过索引访问列表元素列表嵌套列表可变元组 Tuple定义和使用元组元素对比列表的优点元组分配、打包和解包List 与 Tuple 的
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008