我在主类的外部编写了一个递归方法,以插入对象代替字符串。递归代码传递给列表,字符串和字典的嵌套字典(v)。
嵌套字典是根据JSON文件创建的。第二个参数UiClassList是与字典v中的字符串实例匹配的字符串列表。第三个参数(instanceList)包含QtDesigner模块main方法中的类对象,这些对象将字典v中的字符串替换为该对象。
现在,我想将递归代码(带有'self'变量)用作主类中的方法。
我的问题:鉴于主类包含self.UiClassList和self.instanceList,如何调用递归方法?作为self.print_dict()吗?字典v的属性正在更新(用对象替换字符串),因此我无法将 print_dict(v2,UiClassList,instanceList) 替换为 self.v() ,因为达到了最大递归深度。你能给些建议么?作为参考,独立算法会到达每个匹配的字符串,并将其替换为其对象。
def print_dict(v, UiClassList, instanceList ):
#recursively moves through dictionary v and replaces string instances
#of form Ui_menuName (from QtDesigner) which exist in a JSON file in the
#first element of each list (next element may be a dictionary), with the
#object representation of that Ui string
if isinstance(v, dict):
for k, v2 in v.items():
if isinstance( v2, str ):
indx = UiClassList.index( v2 )
v2 = instanceList[indx]
print_dict( v2, UiClassList, instanceList )
elif isinstance(v, list):
for k, v2 in enumerate(v):
if isinstance( v2, dict ):
for k, v3 in v2.items():
if isinstance( v3, str ):
indx = UiClassList.index( v3 )
v2[k] = instanceList[indx]
print_dict(v2, UiClassList, instanceList )