在Python 2.7,我越來越無法拆分大型Python模塊
'模塊' 有沒有屬性
,和/或
'名' 是未定義
錯誤,當我試圖分裂一個大的python文件。
(我已經看過類似的帖子和Python模塊文檔)
假設你有構造這樣一個Python文件:
<imports>
<50 global variables defined>
<100 lengthy functions that each use most or all of the globals
defined above, and also call each other>
<main() that calls some of the functions and uses the globals>
所以我可以很容易地分類的功能組合在一起,爲每個組創建一個python文件,並將它們放在那裏。問題是每當我嘗試從主python文件中調用它們中的任何一個時,我都會遇到上面列出的錯誤。我認爲這個問題與循環依賴有關。由於所有的函數都依賴於全局變量,而且相互之間都是循環依賴的。
如果我有main_file.py,group_of_functions_1.py和group_of_functions_2.py,
main_file.py將有:
import group_of_functions_1.py
import group_of_functions_2.py
和group_of_functions_1.py將有
import main_file.py
import group_of_functions_2.py
和group_of_functions_2.py將有
import main_file.py
import group_of_functions_1.py
無論我使用「import package_x」還是「from package_x import *」,問題依然存在。
如果我採取的擺脫全局的路線,那麼大部分的功能將有50個參數,它們將在繞過,然後還需要返回
什麼是清理它的正確方法?
(我已經看過類似的帖子和Python模塊文檔)
*「如果我採取擺脫全局的路線」 - - 是的,那麼。 *「大部分函數都會有50個參數傳遞,然後還需要返回」* - 然後將相關參數封裝在某種對象中,這是一個非常常見的重構模式(參見例如https:// sourcemaking.com/refactoring/introduce-parameter-object) – jonrsharpe
我懷疑你沒有使用自定義[類](https://docs.python.org/3/tutorial/classes.html#a-first-look-在你的代碼中)。希望一旦你將這些全局變量轉換成類,你的大部分依賴問題就會消失,並且把你的主要功能變成這些類的方法。它可能需要一些思考(並努力工作)來重新安排當前的設計,但從長遠來看這將是值得的。您的代碼將變得更易於閱讀,理解,維護和測試。 –
因此,考慮jonrsharpe的建議,我剛剛創建了一個類Parameters(),它只包含一個__init __(self)方法,其中包含所有50多個變量。然後在main_file.py中,我首先初始化params = Parameters(),並將該params對象全部傳遞給該地方。 – John