python:从变量名创建实例

python:从变量名创建实例,python,class,instance,Python,Class,Instance,***EDIT2:很抱歉代码被破坏了。下面是说明相同问题的工作代码: class bead(): def printmsg(a): print('test message') chain1=bead() x='chain1' eval(x + '.printmsg()') ***编辑:谢谢你回答最初的问题。以下是我的问题的一个更好的措辞: class bead(): def msg(): print('test message') x='ch

***EDIT2:很抱歉代码被破坏了。下面是说明相同问题的工作代码:

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 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文本”

有更好的方法吗

***EDIT:getattr()用于从类中提取信息。谢谢你,格尼布勒。让我稍微改变一下问题:

我可以用什么来代替:

x='chain1'
我想我明白了。您可能想要的是:

>>> 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'
您可以说

getattr(locals()[x], y)


这就是你的意思吗?

做什么?它真的没有任何用处。我不明白-你的标题是“从变量名创建实例”,但看起来你正在尝试访问
testClass.test1
。这不是
testClass
类的实例,您也没有创建它。我不理解编辑后的问题<代码>求值(x+'.+y+'=bead()')不起作用。你不能在那里做作业。您是在寻求一种动态创建变量的方法,还是在询问有关该类的一些问题?是的。我正试图从字符串的变量动态创建一个类的实例。@jHoro,你最好剪切粘贴而不是键入你的问题。您的示例从来不会像键入的那样工作。但这是:“testClass”而不是testClass谢谢您的回答。然而,我没有很好地表达这个问题。请注意编辑。
getattr(locals().get(x), y)