zoukankan      html  css  js  c++  java
  • python3 类的组合使用

    1.组合的定义

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

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

    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.组合的应用例子-圆环计算

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

    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课程

      当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好

    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 
    '''
  • 相关阅读:
    js中的数据类型转换
    js中的数据类型
    模仿QQ菜单的手风琴效果(点击当前展示其“兄弟”关闭)
    QQ菜单案例,点击展开再次点击关闭(类似手风琴效果)
    日期格式化:SimpleDateFormat【线程不安全】、FastDateFormat和Joda-Time【后两个都是线程安全】
    lik模糊e查询语句,索引使用效果详解
    组合索引的使用效果的总结
    Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享
    Spring4新特性
    Spring 事物机制(总结)
  • 原文地址:https://www.cnblogs.com/jason-lv/p/8325283.html
Copyright © 2011-2022 走看看