1. 組合:一個對象的屬性值是另一個類的實例對象,alex.weapon是Weapon類的對象

class Dog: def __init__(self,name,aggr,hp,kind): self.name=name self.aggr=aggr self.hp=hp self.kind=kind def bite(self,person): person.hp-=self.aggr class Person: def __init__(self,name,aggr,hp,sex): self.name=name self.aggr=aggr self.hp=hp self.sex=sex self.money=0 def attack(self,dog): dog.hp-=self.aggr def get_weapon(self,weapon): if self.money >= weapon.price: self.money -=weapon.price self.weapon=weapon self.aggr +=weapon.aggr else: print('余額不足,請先充值!') class Weapon: def __init__(self,name,aggr,njd,price): self.name=name self.aggr=aggr self.njd=njd self.price=price def hand18(self,stroke): #武器放大招 if self.njd>0: stroke.hp -= self.aggr*2 self.njd -=1 alex=Person('alex',0.5,100,'不詳') jin=Dog('金老師',100,500,'teddy') w=Weapon('打狗棒',100,3,998) alex.money += 1000 #充值1000 #alex獲取裝備 alex.get_weapon(w) print('alex獲取的裝備對象:',alex.weapon) print('alex獲取裝備后總的血量:',alex.aggr) print(alex.__dict__) print('---------------------') alex.attack(jin) #alex打狗,狗的血掉了 print('alex打狗后,狗的血量:',jin.hp) print('++++++++++++++++++++++') alex.weapon.hand18(jin) #alex用獲取到的裝備的大招打攻擊狗 print('alex用大招攻擊狗后,狗的血量:',jin.hp)
2. 利用類的組合,求一個圓環的面積和周長

from math import pi class Circle: def __init__(self,r): self.r=r def area(self): #面積 return pi*(self.r**2) def perimeter(self): #周長 return 2*pi*self.r class Ring: def __init__(self,outside_r,inside_r): self.outside_c=Circle(outside_r) self.inside_c=Circle(inside_r) def area(self): return self.outside_c.area()-self.inside_c.area() def perimeter(self): return self.outside_c.perimeter()+self.inside_c.perimeter() #求一個圓環的面積和周長 ring=Ring(20,10) print(ring.area()) print(ring.perimeter())
3. 利用類的組合,創建一個老師類, 老師有生日,生日也可以是一個類(年月日)

class Birthday(): def __init__(self,year,month,day): self.year=year self.month=month self.day=day class Course: language = ['Chinese'] def __init__(self,course_name,period,price): self.name = course_name self.period = period self.price = price def func(self): pass class Teacher(): def __init__(self,name,age,sex,birthday): self.name=name self.age=age self.sex=sex self.birthday=birthday self.course=Course('python','6 months',2000) #實例對象屬性是類Course實例對象 b=Birthday('2020','02','27') t1=Teacher('小王',28,'女',b) #實例對象t1的屬性birthday是類Birthday實例對象 print('老師生日的年份:',t1.birthday.year) print('老師生日的月份:',t1.birthday.month) print('----------------------') print('老師教的課程名稱:',t1.course.name) print('老師教的課程價格:',t1.course.price)
4. 當類之間有顯著不同,並且較小的類是較大的類所需要的組件時,用組合比較好;
5. 學校管理系統