Python 从字符串创建对象类型
标题可能很模糊,我不知道该怎么说这个问题,所以请原谅 我有一个python文件,比如module.pyPython 从字符串创建对象类型,python,xml,Python,Xml,标题可能很模糊,我不知道该怎么说这个问题,所以请原谅 我有一个python文件,比如module.py class myClass(obj): """ class Description """ def myMethod(args): """ method Description """ # method definition 我有一个xml文件,比如说module\u result.xml <
class myClass(obj):
"""
class Description
"""
def myMethod(args):
"""
method Description
"""
# method definition
我有一个xml文件,比如说module\u result.xml
<testsuite errors="0" failures="0" name="module.myClass-20161215114804" skipped="0" tests="1" time="0.000">
<testcase classname="module.myClass" name="myMethod" time="0.000"/>
<system-out>
something
</system-out>
</testsuite>
我必须通过从xml中读取名称来实现这一通用性,这些名称的类型为string
getdoc()的参数类型是对象类型,我在使用带有字符串的getddoc()时遇到此错误:
str(object='') -> str
str(bytes_or_buffer[, encoding[, errors]]) -> str
Create a new string object from the given object. If encoding or
errors is specified, then the object must expose a data buffer
that will be decoded using the given encoding and error handler.
Otherwise, returns the result of object.__str__() (if defined)
or repr(object).
encoding defaults to sys.getdefaultencoding().
errors defaults to 'strict'.
test.py中的工作代码:
import module
getdoc(module.myClass.myMethod)
但是,这是硬编码的,这在我的情况下是不可接受的
我正在从xml文件中提取模块/myClass/myMethod名称
假设我通过某种逻辑在变量中得到了这些名称,如下所示:
string_variable = "module.myClass.myMethod"
我现在要做的是:
getdoc(string_variable)
这样做后,我得到上述错误
如何将字符串转换为对象类型?引用了其他地方的两个不同问题 及 假设您想从“myModule”实例化一个“myClass”实例。为了简单起见,我们假设“myModule”已经导入
import sys
import myModule
import myOtherModule
def create_object(modulename, classname): # modulename and classname are strings
mod = sys.modules[modulename]
cls = getattr(mod, classname)
inst = cls()
return inst
我不明白你想表达的意思。。这里的“name”是什么?我想你问的是:给定一个表示类名称的字符串,如何实例化该类的实例?。无论如何,我们可能知道你在寻找什么。我再次更新了我的答案,以反映我学到的一些新东西。你第一次就答对了问题。。这里我不知道模块/类/方法的名称。。。。它们只是作为字符串类型(从xml文件中提取)存储在某个变量或列表中。我将编辑问题,使事情更清楚…我更新的答案是接近你想要的。它假定模块已导入,但目标类为字符串形式。e、 g.
obj=create\u object(“myModule”、“myClass”)
您可以使用我引用的链接,了解如何通过字符串动态导入模块,例如\uuuuu import\uuuu(“myModule”)
import sys
import myModule
import myOtherModule
def create_object(modulename, classname): # modulename and classname are strings
mod = sys.modules[modulename]
cls = getattr(mod, classname)
inst = cls()
return inst