簡體   English   中英

避免包裝中的循環依賴

[英]avoiding a circular dependency in packaging

我正在清理我繼承的一些Python(2.7)代碼,並且遇到了我想要擺脫的循環導入場景。 代碼當前運行(通過濫用導入功能),但是當其他代碼不以特定方式訪問它時,它會導致問題。

文件結構基本上是這樣的:

/deep/nested/path/__init__.py
/deep/nested/path/objects.py
/deep/nested/path/api.py

objects是數據模型的集合

api使用函數公開開發人員接口以獲取/創建objects實例。

發生循環導入是因為某些objects需要調用api函數來創建子對象。

這段代碼處理分析並執行很多(很多對象,深度遞歸)。 包名稱空間也是相當嵌套的 - 因此使用包路徑會對性能產生切實影響。

我很想將objects所需的工廠函數移動到該文件中,然后將它們導回到api以供一般使用。 這將解決我的問題(並消除一個點),但失去一些代碼組織(實際上相當不錯)。 我希望另一組眼睛給出一些意見。

雖然這里已經有幾個關於循環進口的問題,但我並不關心讓它發揮作用(它確實如此)。 我擔心最小化點符號。 api.factoryobjects.foo工作,但package.api.factory不會。

也許最好將這些工廠功能轉移到第三個模塊中。 然后objects可以導入它以創建其對象; 如果需要, api可以導入它; 如果其他模塊需要它包含的內容,則可以導入它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM