Python:从变量名创建实例
***编辑2:抱歉,之前的代码有问题。这里有一段能正常运行的代码,展示了同样的问题:
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)
输出:
'测试1文本'
有没有更好的方法来做到这一点?
***编辑:getattr()可以用来从类中提取信息。谢谢gnibbler。不过让我稍微改一下问题:
我可以用什么代替:
x='链1'
y='分子1'
2 个回答
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
12
与其使用 eval()
,你可以这样说:
getattr(locals()[x], y)
或者
getattr(locals().get(x), y)
这就是你的意思吗?