首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否将字符串转换为Python类对象?

是否将字符串转换为Python类对象?
EN

Stack Overflow用户
提问于 2009-07-24 07:01:24
回答 8查看 283.2K关注 0票数 221

给定一个字符串作为Python函数的用户输入,如果在当前定义的名称空间中存在具有该名称的类,我希望从中获取一个类对象。本质上,我想要一个函数的实现,它将产生这样的结果:

代码语言:javascript
复制
class Foo:
    pass

str_to_class("Foo")
==> <class __main__.Foo at 0x69ba0>

这到底有没有可能?

EN

回答 8

Stack Overflow用户

发布于 2009-07-24 07:13:11

这可能是可行的:

代码语言:javascript
复制
import sys

def str_to_class(classname):
    return getattr(sys.modules[__name__], classname)
票数 180
EN

Stack Overflow用户

发布于 2009-07-24 07:12:08

你可以这样做:

代码语言:javascript
复制
globals()[class_name]
票数 130
EN

Stack Overflow用户

发布于 2012-12-11 04:08:18

您需要类Baz,它位于模块foo.bar中。在Python2.7中,您希望使用importlib.import_module(),因为这将使向Python3的转换更容易:

代码语言:javascript
复制
import importlib

def class_for_name(module_name, class_name):
    # load the module, will raise ImportError if module cannot be loaded
    m = importlib.import_module(module_name)
    # get the class, will raise AttributeError if class cannot be found
    c = getattr(m, class_name)
    return c

使用Python < 2.7:

代码语言:javascript
复制
def class_for_name(module_name, class_name):
    # load the module, will raise ImportError if module cannot be loaded
    m = __import__(module_name, globals(), locals(), class_name)
    # get the class, will raise AttributeError if class cannot be found
    c = getattr(m, class_name)
    return c

使用:

代码语言:javascript
复制
loaded_class = class_for_name('foo.bar', 'Baz')
票数 103
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1176136

复制
相关文章

相似问题

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