日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python的原则_python 类的使用原则

發(fā)布時(shí)間:2025/3/12 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的原则_python 类的使用原则 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Class 的繼承分類

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

class 的繼承算法

深度優(yōu)先算法:

1. 把根節(jié)點(diǎn)壓入棧中

2.每次從棧中彈出一個(gè)元素,搜索所有在它下一級的元素,將這些元素壓入棧中,

3 重復(fù)1和2

C3算法:公式:

L(object)=[object]

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

merge算法

1 第一個(gè)列表的第一個(gè)元素是后續(xù)列表的第一個(gè)元素,或者后續(xù)列表中沒有再次出現(xiàn),則將這個(gè)元素合并到最終的解析列表中,并從當(dāng)前操作的所有列表中刪除

2. 如果不符合,則跳過此元素,查找下一個(gè)列表的第一個(gè)元素,重復(fù)1的判斷規(guī)則

3. 如果最終無法把所有元素歸并到解析列表,則報(bào)錯(cuò)

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))

結(jié)果:

(, , , , )

類的設(shè)計(jì)原則:

S: Single responsibility Principle 一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)

O:?????? Open Closed Principle? ,對擴(kuò)展開發(fā),對修改關(guān)閉

L:   Liskov Substitution principle? 里氏替換原則 使用基類引用的地方必須能使用繼承類胡對象

I:???????? Interface Segregation Principle? 如果一個(gè)類包含了過多的接口方法,面這些方法在使用過程中并非不可分割,那么應(yīng)當(dāng)將他們分離

D:?????? Dependency Inversion priciple? 依賴倒置原則,高層模塊不應(yīng)該直接依賴底層模塊,他們應(yīng)該依賴抽象類或接口

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

18

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在養(yǎng)寵物"%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 "小朋友{},年齡是{} 現(xiàn)在".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

46

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()

結(jié)果如下:

小朋友LH,年齡是18 現(xiàn)在在養(yǎng)寵物

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

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

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

小朋友LH,年齡是18 現(xiàn)在在養(yǎng)寵物

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

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

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

小朋友LH,年齡是18 現(xiàn)在在安排工作

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

小朋友LH,年齡是18 現(xiàn)在在安排工作

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

總結(jié)

以上是生活随笔為你收集整理的python的原则_python 类的使用原则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。