(1)類的設計原則:solid,是5個原則的首字母,即單一職責原則(single responsbility principle)、開放關閉原則(open close principle)、黎克特制替換原則(liskov substitution principle)、介面分離原則(inte***ce segregation priciple)、依賴倒置原則(independency inversion principle)
(2)單一職責原則(single responsbility principle):即乙個類只負責乙個職責,完成乙個功能。好處是1。易於維護,可以寫出高內聚的**,即乙個類中所有的屬性和方法都是緊密相鄰的,聚合度高的,不會有不相干的方法和屬性;2.已於**的復用,由於單一職責,不會和其他職責混在一起,便於重複的使用
(3)開放關閉原則(open close principle):即對擴充套件開放,對修改關閉,意思是寫好的方法可以允許去進行擴充套件,但不要隨意其修改。好處是1.易於**維護,提公升方法安全性,如果隨意對修改方法,有可能會破壞方法的原有功能;2.保證**的擴充套件性,兩個例子,如裝飾器可以起到擴充套件方法功能的作用,不會改變原有**,如幾個方法功能相同,只是面向的物件不同,對這幾個方法進行判定呼叫(if--else語句)時,可以將方法名稱改為相同,可以避免新增物件時增加判定語句,這裡可以直接呼叫乙個方法即可,因為不管是哪個物件,都是呼叫這個名稱的方法
def petswork(self):for pet in self.pets:
# if isinstance(pet, dog):
# pet.watch()
# else isinstance(pet, cat):
# pet.catch()
pet.work()
class dog(animal):def work(self):
print("%s看家" % self)
class cat(animal):(4)黎克特制替換原則(liskov substitution principle):使用基類引用的地方,必須可以使用繼承類的物件,即任何地方繼承類都可以用來替代基類,如乙個父類是鳥類,擁有叫和飛兩個方法,但是其繼承類是燕子和鴕鳥,而鴕鳥不具有飛這個方法,所以不能使用鴕鳥來替代鳥類,違背黎克特制替換原則。好處是1.防止**出現不可預知的錯誤,因為子類繼承了父類中一些其不能擁有的方法;2.方便用在基類上的測試**,復用在子類上def work(self):
print("%s捉老鼠" % self)
(5)介面分離原則(inte***ce segregation priciple):如果乙個類包含很多介面,這些介面在使用中可以分離,那麼就盡量將其分離開來,如上述黎克特制替換原則中的鳥類和鴕鳥的繼承,違背了黎克特制替換原則,這時就可以將鳥內中的兩個方法進行分離在不同的類中,只讓鴕鳥繼承叫的方法即可,這樣即遵循了介面分離原則,也不違背黎克特制替換原則。其實python中的介面,可以理解為就是抽象的方法。好處是提高介面的復用價值
(6)依賴倒置原則(independency inversion principle):即高層模組不應該直接依賴於底層模組,而是依賴於抽象的類或是抽象的方法,如電腦依賴的並不是具體的滑鼠類,而是滑鼠的類和方法,只要能單擊,雙擊和移動指標就行,具體的東西可以是滑鼠,也可以是鍵盤
(7)總結:這些原則可以轉化為自己程式設計的經驗,其中在python中常用的類設計原則是單一職責原則(single responsbility principle)、開放關閉原則(open close principle),其他三個是在具體專案開發中才會用到
Python設計模式 設計原則
1.單一職責原則 每個類都只有乙個職責,修改乙個類的理由只有乙個 2.開放 封閉遠端 ocp 開放是指可拓展性好,封閉是指一旦乙個類寫好了,就盡量不要修改裡面的 通過拓展 繼承,重寫等 來使舊的類滿足新的需求,而不是修改乙個類裡面的 3.依賴倒轉原則 高層模組不應該依賴底層模組,兩個都應該依賴抽象 ...
Python設計模式 設計原則
1.單一職責原則 每個類都只有乙個職責,修改乙個類的理由只有乙個 2.開放 封閉遠端 ocp 開放是指可拓展性好,封閉是指一旦乙個類寫好了,就盡量不要修改裡面的 通過拓展 繼承,重寫等 來使舊的類滿足新的需求,而不是修改乙個類裡面的 3.依賴倒轉原則 高層模組不應該依賴底層模組,兩個都應該依賴抽象 ...
深入了解Python 方法之類方法 靜態方法
寫在之前 昨天的文章 詳解類方法之繫結方法與非繫結方法 中寫了方法中的繫結方法和非繫結方法,今天我們繼續來學習剩下的 類方法 和 靜態方法 類方法 靜態方法 在開始之前,先讓我們來看下面一段 class sample language c def init self self.language py...