但这并不是在创建一个实例。根据格尼布勒的回答,你可以举一个例子:
***编辑2:很抱歉代码损坏。以下是说明相同问题的工作代码:
class bead():
def printmsg(a):
print('test message')
chain1=bead()
x='chain1'
eval(x + '.printmsg()')
***编辑:谢谢你回答了原来的问题。这是我的问题的一个措辞更好的版本:
class bead():
def msg():
print('test message')
x='chain1'
y='bead1'
eval(x + '.' + y + '=bead()')
chain1.bead1.msg()
输出:"测试消息"
有什么更好的方法?
原始问题:
脚本:
class testClass():
test1='test1 text'
x='testClass'
y='test1'
eval(x + '.' + y)
输出:"test1 text"
有更好的方法吗?
***EDIT:getattr()用于从类中提取信息。谢谢你。不过,让我稍微改变一下问题:
我可以用什么代替
x="链1"y=‘mol1'
您可以说而不是eval()
getattr(locals()[x], y)
或
getattr(locals().get(x), y)
你是这个意思吗?
我想我明白了。你可能想要的是:
>>> class testClass():
... test1='test1 text'
...
>>> getattr(testClass, 'test1')
'test1 text'
但这并不是在创建一个实例。根据格尼布勒的回答,你可以举一个例子:
>>> locals().get(x)()
<__main__.testClass instance at 0xb73b056c>
>>> getattr(locals().get(x)(), y)
'test1 text'
对于您的最新编辑:
>>> class bead():
... def printmsg(a):
... print('test message')
...
>>> chain1=bead()
>>> x='chain1'
>>> eval(x + '.printmsg()')
test message
>>> getattr(locals()[x], 'printmsg')()
test message