python:从变量名创建实例
***EDIT2:很抱歉代码被破坏了。下面是说明相同问题的工作代码: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
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)