25.类的组合
组合:即在类实例化时,将另一个类的实例作为参数传入,这样可以将两个实例关联起来。
组合的使用场景:当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好。
举例:利用组合求圆环的面积和周长
from math import pi class Circle: def __init__(self,r): self.r=r def area(self): return self.r**2*pi def perimeter(self): return 2*pi*self.r class Ring: def __init__(self,R,r): self.R=Circle(R) #一个类的属性值是另外一个类的对象 self.r=Circle(r) def area(self): return self.R.area()-self.r.area() #调用该属性的方法时,就会产生两连点现象 def perimeter(self): return self.R.perimeter()+self.r.perimeter() ring=Ring(20,10) print(ring.area()) print(ring.perimeter())
执行结果:
942.4777960769379
188.49555921538757
练习组合:
题目:创建老师类和生日类,结合组合功能,给老师过生日
class Birthday: def __init__(self,year,mouth,day): self.year=year self.mouth=mouth self.day=day def happy(self): return ('生日是%s年%s月%s日'%(self.year,self.mouth,self.day)) class Teacher: def __init__(self,name,y,m,d): self.name=name self.birthday=Birthday(y,m,d) #Teacher类的参数是Birthdayde 对象,这里使用了组合 def guoshenri(self): print('%s的%s'%(self.name,self.birthday.happy())) ss=Teacher('小磊','1772','3','5') ss.guoshenri() print(ss.birthday.year) #查看属性的属性,两连点现象
执行结果:
小磊的生日是1772年3月5日
1772

浙公网安备 33010602011771号