将字符串转换为对象实例名称 - python

1 投票
1 回答
1378 浏览
提问于 2025-04-17 04:39

我可能走错了方向,但我还是想说说...

我正在尝试从SQL数据填充一个QTreeView,使用的是QAbstractItemModel(说实话,我对这个东西理解得很困难)。我在跟着的一个教程(最简单的那个)是通过简单地创建'节点'的新实例,然后从列表生成模型来填充树形结构。这个节点有一个名字和一个父节点(如下所示)。这样做在程序内部生成数据是可以的,我大致能跟上这个思路 :)

但是,我想从表格中导入数据,并使用一个字符串来识别正确的父节点——主要是因为如果我在遍历记录时,就不能用单独的变量给每个节点命名(?)。我会这样写:for x in recs: node = Node("name", parentnode)。

当我这样做时,我收到明显的错误信息,提示字符串不是正确的对象,并且没有方法可用。有没有办法使用从我的表中得到的字符串来识别正确的'父'对象?或者,有人能给我推荐一个非常基础的QTreeView模型教程,适合那些热情但不一定聪明的学习者吗?

rootNode   = Node("Hips")
childNode0 = TransformNode("RightPirateLeg",        rootNode)
childNode1 = Node("RightPirateLeg_END",    childNode0)
childNode2 = CameraNode("LeftFemur",             rootNode)
childNode3 = Node("LeftTibia",             childNode2)
childNode4 = Node("LeftFoot",              childNode3)
childNode5 = LightNode("LeftFoot_END",          childNode4) 

我意识到我可能是在不懂事的情况下就急于求成,对此我提前表示歉意。

1 个回答

2

这些字符串是全局变量的名字吗?如果是的话,你可以用 globals()['name'] 来获取这个全局变量的值,(当然要把 'name' 替换成你想要的变量名的字符串)。

或者,更好的办法是,不要到处乱放变量名在全局命名空间里,你可以使用一个 dict(字典):

node={}
node['rootNode']=Node('Hips')
node['childNode0']=TransformNode('RightPirateLeg',node['rootNode'])
...

这样可以很方便地将字符串名字和对应的值进行关联。

撰写回答