python面向对象的组合用法

python面向对象的组合用法

代码的重复利用除了继承还有另外的一种方式,就是:组合

组合:在一个类中以另外一个类的对我峡谷作为数据属性,称为类的组合

例如:计算圆环的面积:

最开始:我们不使用组合:

from math import pi
class circle:
    def __init__(self, r):
        self.r = r
    def circle_area(self):
        return pi*self.r**2
    def circle_permeter(self):
        return 2*pi*self.r
 
class ring:
    def __init__(self, out_r, in_r):
        self.out_r = out_r
        self.in_r = in_r
    def ring_area(self):
        return pi*self.out_r**2 - pi*self.in_r**2
    def ring__permeter(self):
        return pi * self.out_r * 2 - pi * self.in_r * 2
ring1 = ring(5, 3)
print(ring1.ring__permeter())
print(ring1.ring_area())

使用组合用法:

from math import pi
class circle:
    def __init__(self, r):
        self.r = r
    def circle_area(self):
        return pi*self.r**2
    def circle_permeter(self):
        return 2*pi*self.r
 
 
 
class ring:
    def __init__(self, out_circle, in_circle):
        self.out_circle = circle(out_circle)
        self.in_circle = circle(in_circle)
 
    def ring_area(self):
        return self.out_circle.circle_area() - self.in_circle.circle_area()
 
    def ring__permeter(self):
        return self.out_circle.circle_permeter() - self.in_circle.circle_permeter()
ring1 = ring(5, 3)
print(ring1.ring__permeter())
print(ring1.ring_area()) 

组合的两种方式:

1.在__init__方法里面组合

class BirthDate:
    def __init__(self,year,month,day):
        self.year=year
        self.month = month
        self.day = day
class Course:
    def __init__(self,name,price,period): #period为周期
        self.name =name
        self.price = price
        self.period = period
class Teacher:
    def __init__(self,name,salary,year,month,day,price,period): #那么这个里面也要把该有的属性传进去
        self.birth = BirthDate(year,month,day) #在里面组合(将BirthDate里面有的属性传入进去)
        self.course=Course(name,price,period)
        self.name = name
        self.salary = salary
# 实例化方法一:
egg = Teacher('egon',2000,1999,12,2,'6 months','15800')  #也要实例化,Teacher类里面的属性都得实例化
print(egg.birth.month)  #当然老师也有生日,就让egg.birth.month
print(egg.course.period)

# 实例化方法二:
egg.birth=BirthDate(1996,22,4)
print(egg.birth.month)

在__init__里面组合

2.在外面组合

class BirthDate:
    def __init__(self,year,month,day):
        self.year=year
        self.month = month
        self.day = day
class Course:
    def __init__(self,name,price,period): #period为周期
        self.name =name
        self.price = price
        self.period = period
class Teacher:
    def __init__(self,name,salary,course):
        self.name = name
        self.salary = salary
        self.course = course
#
# #在外面组合。(组合就是一个类的属性是另一个类的对象)

egg = Teacher('egon',2000,'python')
egg.birth=BirthDate(1996,22,4) #直接给egg一个birth的属性,
print(egg.birth.year)

egg.course =Course('python','6 months',15800)
print(egg.course.period)

在类外面实例化组合

猜你喜欢

转载自blog.csdn.net/qq_38362416/article/details/83960065