今天開始對乙個別人寫的專案進行優化,我先把類之間的關係想好好,開始移動方法,相應的再移動相應的類屬性,改到後面,發現越改越多,基本上改完了所有方法重構就全部完成了,但是改動很大,而且中間沒有測試的機會,一直有錯誤,耦合的太緊密了,沒法一步一步的做,完成了大概一半的樣子,發現做不下去了,即使硬著頭皮做下去出錯的可能太大了,我沒把握重構後不出錯。
沒辦法,又重新checkout了乙份**,想了下,如果先移動方法,方法中包含了屬性,就要求屬性也進行相應的移動。但是如果只移動屬性,就可以通過如下方法很容易實現移動屬性,而相應的方法還在原來的位置。例如a類的a屬性,移動到b類中,a類的do()方法操作了a。這種情況可以將b型別的乙個引用傳給a,把a移動到b類中並提供set/get方法。然後將a類中給a屬性賦值的地方全部替換成b.seta(),相應的獲取a的值的地方替換成b.geta(),這樣就實現了類屬性的移動。完成了這一步,整個程式跟原來是等價的,可以直接驗證。因為沒有修改方法的呼叫,且邏輯不複雜,故出錯的機率要小很多。
publicclass
a
}class
t
移動屬性後的結果
publicclass
a
}class
b
如果只是看這個小例子,看不出移動屬性後有什麼好處,但是在乙個遺留專案中的某乙個類包含多許多不應該在該類中的屬性時,且該類的許多方法都要用到這些屬性時,這樣將屬性移到本來應該的位置中,就能夠清晰每個類的職責,對後面的重構是乙個基礎。
python限定類屬性的類屬性 slots
slots 由於python是動態語言,任何例項在執行期都可以動態地新增屬性。如果要限制新增的屬性,例如,student類只允許新增 name gender和score 這3個屬性,就可以利用python的乙個特殊的 slots 來實現。顧名思義,slots 是指乙個類允許的屬性列表 class s...
Python Class的例項屬性 類屬性
定義 直接定義在類內部的屬性為類屬性,為這個類物件所有,所有類的例項可以訪問。class myclass object class attribute class attribute 訪問 類名.屬性名 myclass.class attribute new name 例項名.屬性名 instanc...
iOS 中的類屬性
ios 知識小集 建立乙個類屬性很簡單,主要有以下幾個步驟 1.使用 property class 來宣告乙個類屬性 2.為類屬性建立乙個儲存變數,通常為全域性變數 3.實現類屬性的getter與setter方法,如果是唯讀屬性,只需要實現getter方法。具體實例如圖2所示。需要注意的是編譯器不會...