python3 类的组合使用

1.组合的定义

  软件重用的重要方式除了继承以外还有另一种方式,即:组合python

  组合指的是,在一个类中以另一个类的对象做为数据属性,称为类的组合。ide

class Weapon: def prick(self,obj):  # 这是该装备的主动技能,扎死对方
        obj -= 500  # 假设攻击力是500
        print(obj) class Person:  # 定义一我的类
    role = 'person'  # 人的角色属性都是人

    def __init__(self, name): self.name = name  # 每个角色都有本身的昵称;
        self.weapon = Weapon()  # 给角色绑定一个武器;
 egg = Person('egon') obj = 1000 egg.weapon.prick(obj)

2.组合的应用例子-圆环计算

  圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积。圆环的周长是内部圆的周长加上外部圆的周长。
  这个时候,咱们就首先实现一个圆形类,计算一个圆的周长和面积。而后在"环形类"中组合圆形的实例做为本身的属性来用。spa

from math import pi class Circle: ''' 定义了一个圆形类; 提供计算面积(area)和周长(perimeter)的方法 '''
    def __init__(self,radius): self.radius = radius def area(self): return pi * self.radius * self.radius def perimeter(self): return 2 * pi *self.radius circle =  Circle(10) #实例化一个圆
area1 = circle.area() #计算圆面积
per1 = circle.perimeter() #计算圆周长
print(area1,per1) #打印圆面积和周长

class Ring: ''' 定义了一个圆环类 提供圆环的面积和周长的方法 '''
    def __init__(self,radius_outside,radius_inside): self.outsid_circle = Circle(radius_outside) self.inside_circle = Circle(radius_inside) def area(self): return self.outsid_circle.area() - self.inside_circle.area() def perimeter(self): return  self.outsid_circle.perimeter() + self.inside_circle.perimeter() ring = Ring(10,5) #实例化一个环形
print(ring.perimeter()) #计算环形的周长
print(ring.area()) #计算环形的面积

3.组合的应用例子-实例化组合调用

  用组合的方式创建了类与组合的类之间的关系,它是一种‘有’的关系,好比教授有生日,教授教python课程code

  当类之间有显著不一样,而且较小的类是较大的类所须要的组件时,用组合比较好对象

class BirthDate: def __init__(self,year,month,day): self.year=year self.month=month self.day=day class Couse: def __init__(self,name,price,period): self.name=name self.price=price self.period=period class Teacher: def __init__(self,name,gender,birth,course): self.name=name self.gender=gender self.birth=birth self.course=course def teach(self): print('teaching') p1=Teacher('egon','male', BirthDate('1995','1','27'), Couse('python','28000','4 months') ) print(p1.birth.year,p1.birth.month,p1.birth.day) print(p1.course.name,p1.course.price,p1.course.period) ''' 运行结果: 1 27 python 28000 4 months '''
相关文章
相关标签/搜索