获取 `package.module.Class` 的 Pythonic 方法

发布于 2024-12-05 00:39:42 字数 216 浏览 1 评论 0原文

给定一个 'package.module.Class' 形式的字符串,Python 中是否有任何简单的方法可以直接获取类对象(假设尚未导入模块)?

如果没有,将 'package.module' 部分与 'Class' 部分、__import__() 模块分开的最干净方法是什么,然后从中获取课程?

Given a string a the form 'package.module.Class', is there any simple way in Python to get the class object directly (assuming the module isn't yet imported)?

If not, what is the cleanest way to separate the 'package.module' part from the 'Class' part, __import__() the module, and then get the class from that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

醉生梦死 2024-12-12 00:39:42
import sys
def str_to_obj(astr):
    '''
    str_to_obj('scipy.stats.stats') returns the associated module
    str_to_obj('scipy.stats.stats.chisquare') returns the associated function
    '''
    # print('processing %s'%astr)
    try:
        return globals()[astr]
    except KeyError:
        try:
            __import__(astr)
            mod=sys.modules[astr]
            return mod
        except ImportError:
            module,_,basename=astr.rpartition('.')
            if module:
                mod=str_to_obj(module)
                return getattr(mod,basename)
            else:
                raise
import sys
def str_to_obj(astr):
    '''
    str_to_obj('scipy.stats.stats') returns the associated module
    str_to_obj('scipy.stats.stats.chisquare') returns the associated function
    '''
    # print('processing %s'%astr)
    try:
        return globals()[astr]
    except KeyError:
        try:
            __import__(astr)
            mod=sys.modules[astr]
            return mod
        except ImportError:
            module,_,basename=astr.rpartition('.')
            if module:
                mod=str_to_obj(module)
                return getattr(mod,basename)
            else:
                raise
耳钉梦 2024-12-12 00:39:42

尝试这样的事情:

def import_obj(path):
    path_parts = path.split(".")
    obj = __import__(".".join(path_parts[:-1]))
    path_remainder = list(reversed(path_parts[1:]))
    while path_remainder:
        obj = getattr(obj, path_remainder.pop())
    return obj

这将适用于任何可以从模块获取属性的东西,例如模块级函数、常量等等。

Try something like this:

def import_obj(path):
    path_parts = path.split(".")
    obj = __import__(".".join(path_parts[:-1]))
    path_remainder = list(reversed(path_parts[1:]))
    while path_remainder:
        obj = getattr(obj, path_remainder.pop())
    return obj

This will work on anything that can be getattr'd from the module, e.g. module level functions, constants and so forth.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文