python類的組合


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.  學校管理系統

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM