给定一个字符串作为Python函数的用户输入,如果在当前定义的名称空间中存在具有该名称的类,我希望从中获取一个类对象。本质上,我想要一个函数的实现,它将产生这样的结果:
class Foo:
pass
str_to_class("Foo")
==> <class __main__.Foo at 0x69ba0>
这到底有没有可能?
发布于 2009-07-24 07:13:11
这可能是可行的:
import sys
def str_to_class(classname):
return getattr(sys.modules[__name__], classname)
发布于 2009-07-24 07:12:08
你可以这样做:
globals()[class_name]
发布于 2012-12-11 04:08:18
您需要类Baz
,它位于模块foo.bar
中。在Python2.7中,您希望使用importlib.import_module()
,因为这将使向Python3的转换更容易:
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:
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
使用:
loaded_class = class_for_name('foo.bar', 'Baz')
https://stackoverflow.com/questions/1176136
复制相似问题