首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从模块返回类、对象、函数和常量作为它们的原始类型

从模块返回类、对象、函数和常量作为它们的原始类型
EN

Stack Overflow用户
提问于 2022-03-15 02:44:39
回答 3查看 60关注 0票数 1

我从Python模块导入了所有东西。说;说;

代码语言:javascript
复制
from module import *

该模块混合了类、函数、对象(单例)和常量。我想知道具体可用的类/函数/对象/常量是什么。

通过使用dir(),我可以将所有类、对象、函数和常量的混合Python列表作为名称。例如,dir()在导入模块后给出当前作用域中的名称;

代码语言:javascript
复制
['Class1', 'Class2', 'obj1', 'func1', 'obj2', 'Class3', 'func2', 'CONST1']

现在,如果我需要知道模块中的名称类型,我需要手动检查它们的类型是否是类/函数/对象/常量;

代码语言:javascript
复制
type(Class1)
type(obj1)
type(func1)
type(CONST1)

我希望从模块导入中获取所有类/函数/对象/常量作为它们的原始类型。例如;

代码语言:javascript
复制
get_classes()

应该回来;

代码语言:javascript
复制
[Class1, Class2, Class3]

其中,Class1Class2Class3作为类返回,而不仅仅是它们的名称。因此type(get_classes()[0]应该返回typeisinstance(get_classes()[0], type)应该返回True。函数、对象和常量也需要类似的输出。

任何帮助都是非常感谢的。谢谢。

EN

回答 3

Stack Overflow用户

发布于 2022-03-15 02:48:45

所有类都是type的实例,因此您可以这样做:

代码语言:javascript
复制
def get_classes(my_list):
    return [i for i in my_list if isinstance(i, type)]
票数 3
EN

Stack Overflow用户

发布于 2022-03-15 02:47:47

您可以使用inspect.isclass,根据文档:

如果对象是类,则返回True,无论是内置类还是用Python代码创建的类。

因此,您的函数可以使用inspect.isclass函数来理解列表,如下所示:

代码语言:javascript
复制
def get_classes(my_list):
    return [value for value in my_list if inspect.isclass(value)]

注意,inspect.isclass在内部使用isinstance。您可以确认它在GitHub中看到了GitHub:

代码语言:javascript
复制
def isclass(object):
    """Return true if the object is a class.
    Class objects provide these attributes:
        __doc__         documentation string
        __module__      name of module in which this class was defined"""
    return isinstance(object, type)
票数 2
EN

Stack Overflow用户

发布于 2022-03-15 02:50:29

尝试查看python中的isinstance()函数。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71476450

复制
相关文章

相似问题

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