首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:确定class_object的基类

Python:确定class_object的基类
EN

Stack Overflow用户
提问于 2018-07-04 23:59:51
回答 2查看 1.6K关注 0票数 0

我有以下代码:

代码语言:javascript
复制
if __name__ == '__main__':

module_name = sys.argv[1]
is_lite = sys.argv[2]

importlib.import_module(module_name)

for name, class_object in inspect.getmembers(sys.modules[module_name]):
    if inspect.isclass(class_object) and not inspect.isabstract(class_object):

        try:
            print "\n\n\n"
            print "Executing: "
            print class_object
            print "\n\n\n"

            instance = class_object()
            instance.execute(is_lite)
        except:
            pass

所有要实例化的对象实际上都是一个名为Foo的抽象类的子类。

inspect返回的class_objects包含模块中包含的所有类,这意味着导入也出现在列表中,并且导入不是Foo的子类。

class_object

我正在寻找的只是一种获取以下信息的方法:

是(class_object,Foo)

这将允许我摆脱try catch,并拥有更符合逻辑和健壮的代码。

但到目前为止,我什么也没有找到,似乎没有简单的方法来检索包含在inspect框架返回的模块中的信息。

我还试图使用内置的issubclass方法,但它失败了,可能是因为class_object不是该类的实例,而仅仅是它的一个描述符: class_object是abc.ABCMeta的实例,而不是Foo的实例,但将包含有关Foo的所有信息。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2018-07-05 00:04:46

看看Python Reflections,它可以提供关于对象的类型、类、属性和方法的信息。

你要找的是

代码语言:javascript
复制
isinstance(inspect, class_object)

多个检查将进一步确定继承性

票数 0
EN

Stack Overflow用户

发布于 2018-07-12 04:59:32

到目前为止,我没有发现其他任何东西,只能这样做:

代码语言:javascript
复制
importlib.import_module(module_name)

for _, class_object in inspect.getmembers(sys.modules[module_name]):
    if inspect.isclass(class_object) and not inspect.isabstract(class_object):

        instance = None

        try:
            instance = class_object()

        except:
            pass

        if instance is not None and isinstance(instance, AbstractBaseClass):
            instance.execute(is_lite)

我找不到一种简单的方法来解析“class_object”内容并提取代表对象类名的字符串。

对于信息,'class_object‘返回如下所示

代码语言:javascript
复制
<class 'name of the actual class'>
   classAttribute: value of the attribute
   ...
   classMethod: <unbound method 'className'.'methodName'>
   ...
   _abc_various_metadatas
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51177493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档