繁体   English   中英

在Python中使用类实例树

[英]Working with trees of class instances in Python

我正在寻找有关处理类实例树的更多信息,以及如何最好地从树干上调用叶子上的方法。 我有一个带有许多分支实例的主干实例(在字典中),每个实例都有很多叶实例(分支中的字典)。 叶子是动作真正发生的地方,因此叶子中存在用于查询值,还原值以及许多其他事情的方法。

这导致感觉像是代码重复,因为我可能想对分支的所有叶子做某事,因此分支中有一些方法可以对叶子,指定的叶子集或已知的所有叶子做某事分支,尽管它们确实通过简单地循环遍历叶子并要求它们自己执行所说的事情来减少代码重复(因此,完成工作的实际代码在叶子类的某个位置)。

然后树干进入,我可能想一口气对整棵树(即所有叶子)做某事,所以我那里有一些方法要求所有已知的对象运行其全叶功能。 我开始觉得这样离开了实际动作,尽管它可以正常工作,并且代码看起来相当紧凑-极其简短,易读且功能正常,但我开始感觉离开了叶子。

另一个问题是逻辑分组。 我可能想将一些数据与一些,大多数或所有叶子相关联,以表明它们属于某个逻辑组,因此当前叶子本身都在存储此类数据。 当我想得到一个逻辑组时,我必须扫描所有叶子并将其收集起来,而不是在干线级别上有某种列表。 实际上,这一切都很好,甚至是很合逻辑的,但是感觉很疯狂。 由于它们的复杂性,这仅仅是使用树状结构的本质吗?还是有其他方法可以进行此类操作? 我宁愿不要建立从相反方向连接到事物的二级结构-例如,建立一个参照逻辑组中的叶子的结构,然后再从类似列表的方向接近它们。 像这样将所有东西都放在一棵大树上的好处是,可以将它倒入水中并用腌菜一次装好。

我很想听听别人从其他事物的经历中得到的想法。

我要从您的问题中消除的是“一切正常”,但是代码开始变得难以管理且难以推理,并且:有更好的方法吗?

您的问题缺少的一件事是坚实的背景。 您的树结构实际上解决了哪种问题? 这些对象实际上是做什么的? 它们是同一类型的对象,还是存在各种对象? 通过其中一些细节,您可能会得到更实际的答复。

就目前而言,我建议您查看有关设计模式的一些资源。 特别是复合模式和访问者模式。

在本书的结尾,您可以看一下设计模式和/或重构为模式 它们都不包含任何Python代码,但是如果您不介意Java,那么Java是很好的入门指南,介绍了难以推理的代码结构并使用模式来更好地组织事物。

您也可以看看Alex Martelli的Python Design Patterns演讲。

这个问题通常具有关于模式和python的一些其他资源链接。

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM