python摸爬滾打之day17----類與類之間的關係
阿新 • • 發佈:2018-11-08
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__()