什么是组合
一个对象的属性是来自另一类的对象,称之为组合。
为何用组合?
组合也是用来解决类与类代码冗余的问题
如何用组合?
组合的基本形式
#组合的基本形式 class Too:#作为另一个对象的属性 pass class Bar: def __init__(self,too): self.too = too t1 = Too() b1 =Bar(t1)
为什么解决冗余代码
class Too: a =1111 def __init__(self,x,y): self.x =x self.y =y class Bar: b=222 def __init__(self,m,n,too): self.m=m self.n=n self.too =too t1 = Too(1,2) b1 = Bar(5,10,t1) b2 = Bar(10,20,t1) #Bar类中实际上需要too的三个属性,但是init定义的话, # 创建需要每次定义多三个参数 #使用组合这种方式不仅可以使用t1对象中数据和函数属性,还可使用类的属性 print(b1.too.x) #1 print(b1.too.a) #1111 #传值减少繁琐,同时Too类,面对复杂的类也可以条理明细
举例:
#继承也可以减少冗余代码 class SchoolMan: def __init__(self,name,age,gender): self.name =name self.age = age self.gender = gender class Course: def __init__(self,name,period,price): self.name= name self.period =period self.price = price #需要课程信息, class Student(SchoolMan): def __init__(self,name,age,gender,course): super().__init__(name,age,gender) self.course = course def check_course(self): print('<name %s>选择<course %s period %s price %s>' %(self.name,self.course.name,self.course.period,self.course.price)) #老师类同样需要课程信息 class Teacher(SchoolMan): def __init__(self,name,age,gender,course,level,salaries): super().__init__(name,age,gender) self.course = course self.level = level self.salaries =salaries def check_course_info(self): print('<course %s period %s price %s>' % ( self.course.name, self.course.period, self.course.price)) c1 = Course('python','5month',30000) s1= Student('s1',18,'male',c1) t1 =Teacher('egon',18,'male',c1,10,5000) s1.check_course() t1.check_course_info()