我对在Python中使用OOP非常陌生。 我有一个问题要解决,我能部分解决它。如果我不能把我的问题讲清楚,我很抱歉。在
如果我创建一个类ClassTest
的对象test
,并用Python键入
test.__dict__
我将得到以下结果:
^{pr2}$如果我再次输入:
^{3}$我要:
{'W0': 86.66314873856487, 'right': 'Seq2', 'W': 41.95659301705824, 'left': <__main__.BranchLength object at 0x1083f8150>}
等等。。。在
有没有一种交互访问所有实例的方法是left
?例如,我对更改W0
的所有值感兴趣。在
谢谢!在
正如其他人所建议的,这看起来像一个tree (or a graph) traversal。在
您可能需要查看recursive algorithms。例如:
基本上,您将递归函数
X
定义为:X
编辑
关于只更新最后一个值的最后一条注释(对于树,这称为leaf):有两种解决方案:
一种方法是对所有的图使用相同类型的节点,并将叶定义为“没有子节点的节点”:
^{pr2}$你会得到:
另一种可能性是为你的叶子和树枝选择不同的类型:
结果是:
前者允许动态叶(也就是说,你可以在以后向leaf添加新的子元素,这样它们就不再是叶子了),而如果你的树节点和叶子本质上不同(例如对于文件系统,你的叶子是文件,树是一个目录结构),那么后者就更有意义了。选择哪一个最好取决于你的问题。在
你有两个可能的解决方案。除了现在如何嵌套它们之外,您可以尝试将
TestClass
类的每个实例保存在一个列表中,然后简单地在列表上进行相同的操作。在不过,这有点笨重,一个更好的解决方案可能是从“顶层对象”开始,使用递归遍历树,边走边操作每个实例。例如:
然后通过调用将
^{pr2}$TestClass
类的实例传递到函数中…并将其中的每个子分支更新为适当的值。在
我不太确定您要做什么,我必须猜测您的类}是什么样子。(在我的示例中,它们是相同的,但在您的代码中肯定不是)。在
TestClass
和{也许你在找这样的东西:
相关问题 更多 >
编程相关推荐