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

posted @ 2020-10-21 22:56  maday  阅读(99)  评论(0)    收藏  举报