python:从变量名创建实例

时间:2011-06-16 04:37:49

标签: python class instance

*** 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'

2 个答案:

答案 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