2014-09-22 52 views
0

我懷疑這將是一個非常補救的問題,但這裏有雲:的最佳做法關於封裝蟒蛇

經常當我在類中作出新的類和方法,我傾向於做了很多的變量是我認爲它們的功能從根本上講是「本地」的,可以通過使它們變爲self.x而不是僅僅是普通的舊x。我發現這對於調試很有幫助(例如,如果我的最終結果不可靠,我可以回過頭來確保數組x的內容是我認爲的內容)。

這允許我在寫作時需要的診斷信息,但後來我必須返回並更改所有self.x,self.y等等......回到普通的舊x,y等等。 。因此,當我稍後輸入對象名稱時,我可以選擇的東西列表是可管理的。

我想這種做法反映了我作爲一名初學者的地位,我想知道那些經驗豐富的傢伙沿着這條路線做了些什麼。我認爲必須有更好的方法。感謝任何時間或建議。

+0

我建議學習使用調試器(如[pdb](https://docs.python.org/3.4/library/pdb.html))。他們通常讓你通過函數評估和探索內部命名空間。如果你以交互方式工作,'pdb.pm'特別有用。 – 2014-09-22 21:41:48

+0

我意識到這是有點個人偏好,但大部分..我已經停止寫課程。當然,它們有時可以用來封裝複雜的狀態,但通常只是編寫函數並傳遞字典,列表,命名對象等是最乾淨的實現。 – roippi 2014-09-22 21:50:59

+0

羅傑,我想你是對的,升級我的開發環境將完全消除這個問題。我會給pdb一槍 - 謝謝。 – 2014-09-23 20:29:12

回答

1

封裝實際上是一種抽象形式。 你想實現的目標是儘可能簡單地處理數據並從外部隱藏所有基本細節。你想要loosely coupled components
這裏有一些提示:

  • 想想正確的數據結構。它應該接近問題,易於使用且易於實施。
  • 避免冗餘代碼。單個任務的一個功能。每個模塊一個類。這也增加了代碼重用。
  • 認爲庫不是程序。將相關的功能和模塊組合到庫中。使用它們的程序應該將庫粘合在一起。然後,您可以從主程序中分別改進這些庫,並將其用於其他項目。
  • 避免全局狀態。你不想有那些遍佈整個地方的變量,並在意想不到的地方修改。這隻會令人頭痛。

儘管如此,只是繼續編碼。隨着時間的推移,你會變得更好。這只是帶有經驗。如果你有一些空閒時間來處理這個問題,試試Project Euler

+0

謝謝你的建議。我會牢記這些。 Interstingly,那些相同的4個子彈點似乎也適用於fortran。我想愛歐拉的事情 - 以前從未聽說過。 – 2014-09-23 20:36:41

+0

@Charlie_M:對於每種編程語言來說都是如此。請嘗試嘗試歐拉項目。你不會後悔的。 :-) – mre 2014-10-17 07:56:12