1. 程式人生 > >python記錄_day17 類與類之間的關係

python記錄_day17 類與類之間的關係

一、依賴關係

a類的物件是b類方法的引數

這種關係是我用著你,但你不屬於我,比如公司和臨時工的關係,是很弱的一種關係

 1 class Zhiwu:
 2     def __init__(self,name,atk):
 3         self.name = name
 4         self.atk = atk
 5     def attack(self,zm):   #物件作為引數傳遞
 6         print("%s打了%s一下" % (self.name,zm.name))
 7         zm.hp -= zhiwu.atk
8 9 class Zombin: 10 def __init__(self,name,hp): 11 self.name = name 12 self.hp = hp 13 14 zhiwu = Zhiwu("豌豆射手",10) 15 zm =Zombin("鐵頭娃",1000) 16 zhiwu.attack(zm) 17 zhiwu.attack(zm) 18 zhiwu.attack(zm) 19 20 print("剩餘血量",zm.hp) 21 22 結果: 23 豌豆射手打了鐵頭娃一下 24 豌豆射手打了鐵頭娃一下 25 豌豆射手打了鐵頭娃一下
26 剩餘血量 970
依賴關係

二、關聯關係、聚合關係、組合關係

a類的物件作為b類的一個屬性

這種關係是我用著你,你也屬於我

一對一的關係:

class Boy:

    def __init__(self,name,girlFriend= None):
        self.name = name

        self.girlFriend = girlFriend   #關聯關係,物件是作為另一個類的屬性的

    def chi(self):
        if self.girlFriend:
            print
("%s和%s去吃飯" %(self.name,self.girlFriend.name)) self.girlFriend.happy() else: print("單身狗,自己一個人吃吧") class Girl: def __init__(self,name,age): self.name =name self.age = age def happy(self): print("出去吃東西很開心") g = Girl("小花",20) b = Boy("張三",g) # b.girlFriend = g b.chi() 結果: 張三和小花去吃飯 出去吃東西很開心
一對一關聯

一對多的關係(反過來就是一對一)

比如,老師和學生,一個老師教多個學生,一個學生聽一個老師講

 1 '''
 2 一對多,反過來是一對一,
 3 一個老師對應多個學生,反過來一個學生對應一個老師
 4 '''
 5 class Teacher:
 6 
 7     def __init__(self,name,lst = None):  #作為屬性,列表裝的是物件
 8         self.name= name
 9         if lst == None:
10             self.lst = []   
11         else:
12             self.lst = lst
13     # 新增學生
14     def add(self,s):
15         self.lst.append(s)
16     # 顯示學生
17     def display(self):
18         for el in self.lst:
19             print(el.name)
20 
21 class Student:
22 
23     def __init__(self,name,number):
24         self.name = name
25         self.number = number
26         
27 s1 = Student("張三",1)
28 s2 = Student("李四",2)
29 s3 = Student("王五",3)
30 s4 = Student("麻子",4)
31 t = Teacher("濤哥")
32 t.add(s1)
33 t.add(s3)
34 t.add(s4)
35 t.display()
36 
37 結果:
38 張三
39 王五
40 麻子
一對多

 

聚合關係:屬於關聯關係中的一種特例。側重點是xxx和xxx聚合成xxx,各有各的生命週期。比如電腦,電腦裡有CPU、硬碟、記憶體等,電腦掛了,CPU還是好的,還是完整的個體。

組合關係:也屬於關聯關係中的一種特例。寫法上差不多, 組合關係比聚合還要緊密。比如 人的大腦、心臟、各個器官,這些器官組合成一個人。這時,人如果掛了,其他的東西也跟著掛了。

 

三、類的特殊方法

1、  類() 時自動執行__init__ , 進行初始化

2、  物件()時自動執行__call__   ,表示呼叫

3、 物件[key]   自動執行  __getitem__

4、物件[key] = value  自動執行 __setitem__

5、del 物件[key]  自動執行 __delitem__

6、 物件+物件  自動執行 __add__

7、with 物件 as 變數    自動執行 __enter__ 和  __exit__

8、 print(物件)   自動執行 __str__

9、 __hash__ == None  幹掉可雜湊,這樣物件就不可雜湊了

10、 __repr__    用repr()時執行

11、__lt__   用<時執行          __gt__   用>時執行

12、 __le__  用<=時執行      __ge__  用<=時執行

13、 __eq__  用==時執行

14、__format__  用format()時呼叫

15、__new__ 建立物件時開闢記憶體,自動執行