*** EDIT2:对于损坏的代码感到抱歉。以下是工作代码,说明了同样的问题:
class bead():
def printmsg(a):
print('test message')
chain1=bead()
x='chain1'
eval(x + '.printmsg()')
***编辑:谢谢gnibbler回答原始问题。这是我的问题更好的措辞版本:
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'
有更好的方法吗?
***编辑:getattr()用于从类中提取信息。谢谢gnibbler。让我稍微改变一下这个问题:
我可以用什么代替:
X = '链1' Y = 'mol1'
答案 0 :(得分:12)
而不是eval()
,你可以说
getattr(locals()[x], y)
或
getattr(locals().get(x), y)
这是你的意思吗?
答案 1 :(得分:1)
我想我明白了。你可能想要的是:
>>> class testClass():
... test1='test1 text'
...
>>> getattr(testClass, 'test1')
'test1 text'
<小时/> 仍然没有创建一个实例。重复gnibbler的答案,在这里你做了一个实例:
>>> 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