簡體   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