python:从变量名创建实例



***编辑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

最新更新