(6)组合
繼承是解決類與類之間代碼冗余的問題(冗余就是重復也是一種強耦合)
另一種方案就是
組合(解耦合)
組合也是解決類與類之間代碼冗余問題的方案
?
組合: 某一個類的對象具備一個屬性,該屬性的值是另外一個類的對象class OldboyPeople:
school = 'Oldboy'
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
class Course:#課程類
def __init__(self,name,price,period):
self.name = name
self.price = price
self.period = period
def tell_info(self):
print('<name:%s price:%s period:%s>' %(self.name,self.price,self.period))
class OldboyStudent(OldboyPeople):
def choose_course(self):
print('%s is choosing course' %self.name)
class OldboyTeacher(OldboyPeople):
def __init__(self, name, age, gender,level):
super().__init__(name, age, gender) #重用一下父類的功能,只要將和父類相同參數傳入即可
self.level=level
def score(self,stu,num):
stu.score=num
print('老師[%s]為學生[%s]打了分[%s] ' %(self.name,stu.name,num))
python_obj=Course('python自動化開發',10000,'3mons')
linux_obj=Course('linux架構',20000,'2mons')
stu1=OldboyStudent('王大炮',18,'male',)
tea1=OldboyTeacher('Egon',18,'male',10)
print(stu1.__dict__)
print(tea1.__dict__) *** stu1.course=python_obj #讓學生1的課程類也傳入python_obj的參數,初始化課程 *** PS:讓stu1的對象具備某一個屬性,這個屬性的值是也是一個對象,但是這個對象來自于另一個類,這就是組合
學生有可能選修多門課
stu1.courses=[] #這里學生課程就直接組合成一個列表
tea1.courses=[]
stu1.courses.append(python_obj) #然后將需要的課程直接放入列表
stu1.courses.append(linux_obj) 查看學生選修的課程
print(stu1.courses)
for obj in stu1.courses:
obj.tell_info() #obj下有一個tell_info方法,直接可以看到相關的課程
?
print(stu1.course.name) #屬性course,這個屬性的值是couse類對象
print(stu1.course.price)
print(stu1.course.period)
stu1.course.tell_info()
PS:對象自己類下和父類、里的屬性和函數都能夠讀取到PS:類就是一個高度整合的東西,相互之間有繼承,也可以靠組合整合到一起,相互獲取屬性和函數
?
轉載于:https://www.cnblogs.com/shizhengquan/p/10093173.html
總結
- 上一篇: b. Suffix Zeroes
- 下一篇: 潜入java内存结构