python的原則 python 類的使用原則

2021-10-12 14:11:05 字數 3114 閱讀 5800

class 的繼承分類

單繼承鏈/無重疊的繼承鏈/有重疊的繼承鏈

class 的繼承演算法

深度優先演算法:

1. 把根節點壓入棧中

2.每次從棧中彈出乙個元素,搜尋所有在它下一級的元素,將這些元素壓入棧中,

3 重複1和2

c3演算法:公式:

l(object)=[object]

l(子類(父類1,.父類2))=[子類]+ merge(l(父類1,.父類2),[父類1,父類2])

merge演算法

1 第乙個列表的第乙個元素是後續列表的第乙個元素,或者後續列表中沒有再次出現,則將這個元素合併到最終的解析列表中,並從當前操作的所有列表中刪除

2. 如果不符合,則跳過此元素,查詢下乙個列表的第乙個元素,重複1的判斷規則

3. 如果最終無法把所有元素歸併到解析列表,則報錯

c3演算法例子:

import inspect

class d:

pass

# l(d(object))= [d] + merge(l(object),[object])

# = [d] +merge(l[object],[object])

# = [d,object] + merge(l, )

# = [d, object]

class b(d):

pass

#l(b(object))= [b]+ merge(l(d),[d])

# = [b]+ merge([d, object],[d])

# = [b]+ merge([d, object],[d])

# = [b,d]+ merge(['', object],[''])

# = [b,d]+ merge([object])

# = [b,d,object]+ merge()

# = [b,d,object]

class c(d):

pass

#l(c(object))= [c,d,object]

class a(b,c):

pass

#l(a)=[a]+merge(l(b),l(c),[b,c])

# =[a]+merge([b,d,object],[c,d,object],[b,c])

# =[a,b]+merge([d,object],[c,d,object],[c])

# =[a,b,c]+merge([d,object],[d,object])

# =[a,b,c,d]+merge([object],[object])

# =[a,b,c,d,object]

print(inspect.getmro(a))

結果:類的設計原則:

s: single responsibility principle 乙個類只負責一項職責

o:       open closed principle  ,對擴充套件開發,對修改關閉

l:   liskov substitution principle  黎克特制替換原則 使用基類引用的地方必須能使用繼承類胡物件

i:         inte***ce segregation principle  如果乙個類包含了過多的介面方法,面這些方法在使用過程中並非不可分割,那麼應當將他們分離

d:       dependency inversion priciple  依賴倒置原則,高層模組不應該直接依賴底層模組,他們應該依賴抽象類或介面

1 classanimal:2 def __init__(self,name,age=1):3 self.name=name4 self.age=age5

6 defeat(self):7 print("%s在吃飯"%self)8

9 defplay(self):10 print("%s在玩"%self)11

12 defsleep(self):13 print("%s在睡覺"%self)14

15 defeat(self):16 print("%s在吃飯"%self)17

19 classperson(animal):20 def __init__(self,name,pets,age=1):21 super().__init__(name,age)22 self.pets=pets23

24 defyang_pets(self):25 for pet inself.pets:26 print("%s在養寵物"%self)27 pet.eat()28 pet.play()29 pet.sleep()30

31 defmake_pets_work(self):32 for pet inself.pets:33 print("%s在安排工作" %self)34 pet.work()35

36 def __str__(self):37 return "小朋友{},年齡是{} 現在".format(self.name, self.age)38

39 classcat(animal):40 defwork(self):41 print("%s在捉老鼠" %self)42

43 def __str__(self):44 return "寵物名字是{},年齡是{}".format(self.name,self.age)45

47 classdog(animal):48 defwork(self):49 print("%s在看門" %self)50

51 def __str__(self):52 return "寵物名字是{},年齡是{}".format(self.name, self.age)53

54 d=dog("小黑",18)55 c=cat("小紅",2)56 p=person("lh",[d,c],18)57 p.yang_pets()58 p.make_pets_work()

結果如下:

小朋友lh,年齡是18 現在在養寵物

寵物名字是小黑,年齡是18在吃飯

寵物名字是小黑,年齡是18在玩

寵物名字是小黑,年齡是18在睡覺

小朋友lh,年齡是18 現在在養寵物

寵物名字是小紅,年齡是2在吃飯

寵物名字是小紅,年齡是2在玩

寵物名字是小紅,年齡是2在睡覺

小朋友lh,年齡是18 現在在安排工作

寵物名字是小黑,年齡是18在看門

小朋友lh,年齡是18 現在在安排工作

寵物名字是小紅,年齡是2在捉老鼠

Python變數查詢LEGB原則

首先要知道python的基本資料型別分為2種,可變以及不可變型別。可變型別list dict set 不可變型別number tuple string 當python訪問變數值時,預設legb查詢原則,如果都找不到,則會丟擲nameerror 但是,作為對變數值進行修改,則會有兩種情況 a 10 d...

Python設計模式 設計原則

1.單一職責原則 每個類都只有乙個職責,修改乙個類的理由只有乙個 2.開放 封閉遠端 ocp 開放是指可拓展性好,封閉是指一旦乙個類寫好了,就盡量不要修改裡面的 通過拓展 繼承,重寫等 來使舊的類滿足新的需求,而不是修改乙個類裡面的 3.依賴倒轉原則 高層模組不應該依賴底層模組,兩個都應該依賴抽象 ...

設計模式(python) 程式設計原則

開放 封閉原則規定,類或物件及其方法對於擴充套件來說,應該是開放的,但是對於修改來說,應該是封閉的。簡單地說,這意味著當你開發軟體應用的時候,一定確保以通用的方式來編寫類或模組,以便每當需要擴充套件類或物件行為的時候不必修改類本身。相反,類的簡單擴充套件將有助於建立新的行為。例如,開放 封閉原則能夠...