1. 程式人生 > >python摸爬滾打之day17----類與類之間的關係

python摸爬滾打之day17----類與類之間的關係

1、類與類之間的聯絡

 1.1  依賴關係

   類A中使用了類B, 類B作為引數傳進類A的方法中被使用. 這種關係中類與類之間的聯絡是最輕的. 

 1 class Elephant:
 2 
 3     def open(self,ele):             # ele 接收的是一個BingXiang的物件
 4         print("我是大象,我會開門")         
 5         ele.kai()
 6 
 7     def jinqu(self):
 8         print("我是大象,我會自己進封閉容器
") 9 10 def close(self,ele): 11 print("我是大象,我會關門") 12 ele.guan() 13 14 15 class BingXiang: 16 17 def kai(self): 18 print("我是冰箱,我會替別人開門") 19 20 def guan(self): 21 print("我是冰箱,我會替別人關門") 22 23 24 class DianFanBao: 25 26 def kai(self): 27 print
("我是電飯煲,我會替別人開門") 28 29 def guan(self): 30 print("我是電飯煲,我會替別人關門") 31 32 33 bx = BingXiang() 34 dfb = DianFanBao() 35 e = Elephant() 36 e.open(bx) 37 e.jinqu() 38 e.close(dfb)
依賴關係

 1.2 關聯關係(組合關係,聚合關係)

   三種關係寫法是一樣的, 但意義是不一樣的.

  關聯關係: 類A和類B是互相關聯的, 類A中使用了類B, 類B成為類A中的屬性或成員. 關係程度要比依賴關係強點. 

 1 class Teacher:
 2 
 3     def __init__(self,name,lst=None):
 4         self.name = name
 5         if lst == None:
 6             self.lst = []
 7         else:
 8             self.lst = lst
 9 
10     def add_sd(self,obj):
11         self.lst.append(obj)       # 將這幾個學生物件新增進self.lst這個老師類的欄位中,成為該屬性的一部分.
12 
13 
14 class Student:
15 
16     def __init__(self,name,numb,score):
17         self.name = name
18         self.numb = numb
19         self.score = score
20 
21 s1 = Student("王大錘",1001,95)
22 s2 = Student("李二炮",1003,90)
23 s3 = Student("馬老五",1004,88)
24 t = Teacher("張老師",[Student("二壯",1010,99)])
25 t.add_sd(s1)
26 t.add_sd(s2)
27 t.add_sd(s3)
28 for i in t.lst:
29     print(i.name)
關聯關係

 1.3  繼承關係

   見後續. 

2、特殊成員方法

  __new__()

  __init__()

  __call__()

  __str__()

  __int__()

  __repr__()

  __getitem__()

  __setitem__()

  __delitem__()

  __enter__()

  __exit__()

  __add__()

  __len__()

  __iter__()

  __hash__()

  __dict__()