Python如何获取模块中类以及类的属性方法信息

目录
  • 一、sys.modules模块
  • 二、inspect模块
  • 三、python获取模块中所有类的实例
  • 总结

一、sys.modules模块

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模块

inspect模块主要提供了四种用处:

  1.对对象进行类型检查

  2.获取源码

  3.获取类或者函数的参数信息

  4.解析堆栈

  • inspect.getmembers(object[, predicate])

返回一个包含对象的所有成员(name, value)的列表。返回的内容比对象的dict包含的内容多,源码是通过dir()实现的。

predicate是一个可选的函数参数,只有predicate函数判断为True的成员才被返回。

  • predicate一般调用以下16个方法
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):

三、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'>]

总结

到此这篇关于Python如何获取模块中类以及类的属性方法信息的文章就介绍到这了,更多相关Python获取模块中类及属性方法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python中如何获取类属性的列表

    前言 最近工作中遇到个需求是要得到一个类的静态属性,也就是说有个类 Type ,我要动态获取 Type.FTE 这个属性的值. 最简单的方案有两个: getattr(Type, 'FTE') Type.__dict__['FTE'] 那么,如果要获取类属性的列表,该怎么做呢? 首先上场的是 dir ,它能返回当前范围的所有属性名称列表: >>> dir() ['__builtins__', '__doc__', '__name__', '__package__'] >>>

  • Python类及获取对象属性方法解析

    1.类外面添加对象属性 class Washer(): def wash(self): print('do some laundry stuff') haier1 = Washer() #添加属性,对象名.属性名 = 值 haier1.width = 400 haier1.height = 500 对象属性既可以在类外面添加和获取,也可以在类里面添加和获取 在类外面获取对象属性: 在上方代码上添加: print(f'洗衣机宽度为{haier1.width}') print(f'洗衣机高度为{ha

  • Python如何获取模块中类以及类的属性方法信息

    目录 一.sys.modules模块 二.inspect模块 三.python获取模块中所有类的实例 总结 一.sys.modules模块 sys.modules是一个全局字典,python启动后就将该字典加载在内存中,每当导入新的模块时sys.modules都将记录这些导入模块.字典sys.modules对于加载模块起到了缓冲的作用. sys.modules拥有字典所拥有的一切方法.如: import sys print(sys.modules[__name__]) print(sys.mod

  • Python简单获取网卡名称及其IP地址的方法【基于psutil模块】

    本文实例讲述了Python简单获取网卡名称及其IP地址的方法.分享给大家供大家参考,具体如下: windows上想知道网卡和IP地址,可以使用ipconfig命令,在linux上可以使用ifconfig命令,得到输出后,可以解析输出内容,我要介绍的方法更为简单,只需要安装一个名为psutil的第三方库即可 # -*- coding: utf-8 -*- #! python2 import psutil #获取网卡名称和其ip地址,不包括回环 def get_netcard(): netcard_

  • 对python中不同模块(函数、类、变量)的调用详解

    首先,先介绍两种引入模块的方法. 法一:将整个文件引入 import 文件名 文件名.函数名( ) / 文件名.类名 通过这个方法可以运行另外一个文件里的函数 法二:只引入某个文件中一个类/函数/变量 需要从某个文件中引入多个函数或变量时,用逗号隔开即可 from 文件名 import 函数名,类名,变量名 接下来,通过一个具体的例子说明引入 模块的具体方法: 假设新建一个python包test2,里边有一个名为run.py的python文件,run.py文件里有一个名为running()的函数

  • python中multiprosessing模块的Pool类中的apply函数和apply_async函数的区别

    目录 1.二者的区别 2.apply() 3.apply_async() 1.二者的区别 apply():  非异步(子进程不是同时执行的),堵塞主进程. 它的非异步体现在:一个一个按顺序执行子进程, 子进程不是同时执行的. 它的堵塞体现在:等到全部子进程都执行完毕后,继续执行apply()后面主进程的代码. apply_async(): 异步的,不堵塞主进程. 它的异步体现在:子进程之间是同时执行的.子进程被分配到不同的cpu上被执行. 它的非堵塞体现在:他不会等待子进程完全执行完毕, 主进程

  • Python实现获取系统临时目录及临时文件的方法示例

    本文实例讲述了Python实现获取系统临时目录及临时文件的方法.分享给大家供大家参考,具体如下: 在开发应用程序的过程中,会有一些临时的信息,或者不太重要的信息,会保存在一个特殊的目录下面,在windows 里面,通常会在 c:\docume~1\admini~1\locals~1\temp 这个地方,而在 centos 中就是 /tmp 目录 比如我们经常上网,网页的的一些临时信息都保存在这个临时目录里面.那么在我们自己写应用程序的时候,怎么得到这个临时目录,怎么创建临时文件呢.在python

  • Python使用xlrd模块操作Excel数据导入的方法

    本文实例讲述了Python使用xlrd模块操作Excel数据导入的方法.分享给大家供大家参考.具体分析如下: xlrd是一个基于python的可以读取excel文件的产品.和pyExcelerator相比,xlrd的主要特点在于读的功能比较强大,提供了表单行数.列数.单元格数据类型等pyExcelrator无法提供的详细信息,使得开发人员无须了解表单的具体结构也能对表单中的数据进行正确的分析转换. 但是xlrd仅仅提供了读取excel文件的功能,不能像pyExcelrator那样生成excel文

  • Spring获取ApplicationContext对象工具类的实现方法

     Spring获取ApplicationContext对象工具类的实现方法 (1)实现的工具类: package com.util; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; final public class ApplicationContextUtil { private s

  • Python使用shelve模块实现简单数据存储的方法

    本文实例讲述了Python使用shelve模块实现简单数据存储的方法.分享给大家供大家参考.具体分析如下: Python的shelve模块提供了一种简单的数据存储方案,以dict(字典)的形式来操作数据. #!/usr/bin/python import sys, shelve def store_person(db): """ Query user for data and store it in the shelf object """ pi

  • python使用fileinput模块实现逐行读取文件的方法

    本文实例讲述了python使用fileinput模块实现逐行读取文件的方法.分享给大家供大家参考.具体实现方法如下: #-------------------------------- # Name: read_lines.py # Author: Kevin Harris # Last Modified: 02/13/04 # Description: This Python script demonstrates # how to use fileinput to read # each l

  • Python实现获取磁盘剩余空间的2种方法

    本文实例讲述了Python实现获取磁盘剩余空间的2种方法.分享给大家供大家参考,具体如下: 方法1: import ctypes import os import platform import sys def get_free_space_mb(folder): """ Return folder/drive free space (in bytes) """ if platform.system() == 'Windows': free_by

随机推荐