2015-08-20 67 views
0

所以,我在python中實現了一個數據樹,它代表了非常像這樣的數學表達式binary expression tree。每個節點代表一個操作(+,*,exp(),...),每個葉代表一個數字或變量。因此我創建了一個模塊Expression.py,它包含父類節點和用於數學運算的子類。有許多不同節點的樹的Python項目結構

現在,隨着項目變得越來越複雜,我開始實施更多的節點類型涵蓋更多的業務和各子類節點已開始有相當的任務期限簡單化等很多方法

到目前爲止,我在Expression.py文件中實現了所有這些子節點。但現在是一個500多行文件,我還沒有完成。我試圖將每個子類放入一個單獨的文件(Java風格)並將它們合併到一個包中,這將與我對正確結構的理解相匹配。但是這個實現給我帶來了問題,因爲像Addition.py不同模塊乘法.py仍然互相引用。例如。一個加法 - 對象的方法可能會返回一個乘法 - 對象,反之亦然。

我的問題是:你如何構建這樣一個項目?如何構建許多相關的子類,除了將它們放在一個巨大的文件中之外,還可以相互引用?

如果我將它們安排在一個包中,我將如何正確導入它們?我將如何正確引用它們?

編輯: 好吧,讓我更加具體,這是一些示例代碼:

class Node(): 
    def __init__(self): 
     pass 
    def derive(self): 
     pass 


class Sine(Node): 
    def __init__(self, arg): 
     self.arg = arg 
    def derive(self): 
     return Cosine(self.arg) 

class Cosine(Node): 
    def __init__(self, arg): 
     self.arg = arg 
    def derive(self): 
     return Multiplication(Num(-1), Sine(self.arg)) 

class Multiplication: 
     ... 

正如你看到的類正弦餘弦有一個循環依賴,我不能(明知)分成兩個獨立的文件。雖然我不想將數千行子類放入一個文件中。這只是示例代碼。這些類實際上包含更多線條。

回答

0

由於您沒有顯示任何代碼,所以只能給出一個普通的答案。首先,將所有內容放在同一個文件中,並將每個類放入單個文件中,您可以選擇將模塊組放入類中。我懷疑所有的課程都依賴於對方。所以你需要更好地理解你的依賴關係的結構。如果您瞭解結構,Python將爲您提供用代碼表達此結構的工具。 Mixins,裝飾器,元類,...是表達複雜結構而不違反DRY的強大工具。所以我的建議是:試着更好地理解你的結構!

相關問題