(6)组合
繼承是解決類與類之間代碼冗余的問題(冗余就是重復(fù)也是一種強(qiáng)耦合)
另一種方案就是
組合(解耦合)
組合也是解決類與類之間代碼冗余問題的方案
?
組合: 某一個(gè)類的對(duì)象具備一個(gè)屬性,該屬性的值是另外一個(gè)類的對(duì)象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) #重用一下父類的功能,只要將和父類相同參數(shù)傳入即可
self.level=level
def score(self,stu,num):
stu.score=num
print('老師[%s]為學(xué)生[%s]打了分[%s] ' %(self.name,stu.name,num))
python_obj=Course('python自動(dòng)化開發(fā)',10000,'3mons')
linux_obj=Course('linux架構(gòu)',20000,'2mons')
stu1=OldboyStudent('王大炮',18,'male',)
tea1=OldboyTeacher('Egon',18,'male',10)
print(stu1.__dict__)
print(tea1.__dict__) *** stu1.course=python_obj #讓學(xué)生1的課程類也傳入python_obj的參數(shù),初始化課程 *** PS:讓stu1的對(duì)象具備某一個(gè)屬性,這個(gè)屬性的值是也是一個(gè)對(duì)象,但是這個(gè)對(duì)象來自于另一個(gè)類,這就是組合
學(xué)生有可能選修多門課
stu1.courses=[] #這里學(xué)生課程就直接組合成一個(gè)列表
tea1.courses=[]
stu1.courses.append(python_obj) #然后將需要的課程直接放入列表
stu1.courses.append(linux_obj) 查看學(xué)生選修的課程
print(stu1.courses)
for obj in stu1.courses:
obj.tell_info() #obj下有一個(gè)tell_info方法,直接可以看到相關(guān)的課程
?
print(stu1.course.name) #屬性course,這個(gè)屬性的值是couse類對(duì)象
print(stu1.course.price)
print(stu1.course.period)
stu1.course.tell_info()
PS:對(duì)象自己類下和父類、里的屬性和函數(shù)都能夠讀取到PS:類就是一個(gè)高度整合的東西,相互之間有繼承,也可以靠組合整合到一起,相互獲取屬性和函數(shù)
?
轉(zhuǎn)載于:https://www.cnblogs.com/shizhengquan/p/10093173.html
總結(jié)
- 上一篇: b. Suffix Zeroes
- 下一篇: 焊接钛合金为什么不能用氮气