zoukankan      html  css  js  c++  java
  • 面向对象(组合)

    from math import pi
    class Circle:
        def __init__(self,r):
            self.r = r
    
        def area(self):
            return pi*self.r**2
    
        def perimeter(self):
            return 2*pi*self.r
    c1 = Circle(5)
    print(c1.area())       #78.53981633974483
    print(c1.perimeter())  #31.41592653589793
    圆形类
    from math import pi
    class Ring:
        def __init__(self,r1,r2):
            if r1>=r2:
                self.outer = r1
                self.inner = r2
            else:
                self.inner = r1
                self.outer = r2
    
        def area(self):
            return pi * self.outer ** 2 - pi * self.inner ** 2
    
        def perimeter(self):
            return 2 * pi * self.outer + 2 * pi * self.inner
    
    r1 = Ring(5,2)
    print(r1.area())        #65.97344572538566
    print(r1.perimeter())   #43.982297150257104
    圆环类
    from math import pi
    class Cylinder:
        def __init__(self,r,h):
            self.r = r
            self.h = h
    
        def area(self):
            c_area = pi * self.r**2
            rec_area = 2 * pi *self.r * self.h
            return c_area*2 + rec_area
    
        def volume(self):
            c_area = pi * self.r ** 2
            return c_area*self.h
    
    c1 = Cylinder(5,8)
    print(c1.area())    #408.4070449666731
    print(c1.volume())  #628.3185307179587
    圆柱类

    什么是耦合?

    模块间的依赖性就是耦合,两个功能函数之间的依赖程度

    紧耦合:紧耦合就是模块或者系统之间关系太紧密,存在相互调用。紧耦合系统的缺点在于更新一个模块的结果导致其它模块的结果变化,难以重用特定的关联模块。

    松耦合通讯机制提供了紧耦合机制所没有的许多优点,并且它们有助于降低客户端和远程服务之间的依赖性。

    类的组合

    from math import pi
    class Circle:
        def __init__(self,r):
            self.r = r
    
        def area(self):
            return pi*self.r**2
    
        def perimeter(self):
            return 2*pi*self.r
    c= Circle(5)
    print(c.area())       #78.53981633974483
    print(c.perimeter())  #31.41592653589793
    
    # 圆环类
    class Ring:
        def __init__(self,r1,r2):
            c1 = Circle(r1)
            c2 = Circle(r2)
            if r1>=r2:
                self.outer = c1       # 组合
                # self.outer.area()   # c1.area()
                self.inner = c2       # 组合
            else:
                self.inner = c1       # 组合
                self.outer = c2       # 组合
    
        def area(self):
            return self.outer.area() -self.inner.area()
    
        def perimeter(self):
            return self.outer.perimeter() + self.inner.perimeter()
    r = Ring(5,2)
    print(r.area())      #65.97344572538566
    print(r.perimeter()) #43.982297150257104
    
    # 圆柱类
    class Cylinder:
        def __init__(self,r,h):
            self.c = Circle(r)     # 组合
            self.h = h
    
        def area(self):
            c_area = self.c.area()
            rec_area = self.c.perimeter() * self.h
            return c_area*2 + rec_area
    
        def volume(self):
            c_area = self.c.area()
            return c_area*self.h
    C = Cylinder(5,8)
    print(C.area())   #408.4070449666731
    print(C.volume()) #628.3185307179587

    组合

        一个类的对象是另一个类对象的属性

        圆形类的对象 是圆环类对象的outer属性的值

     计算圆形相关数据的公式只和Circle类在一起

     其余的用到公式的地方都是通过circle类来使用的

     公式与其他类之间的关系是一个“松耦合”关系

    class Date:
        def __init__(self,year,month,day):
            self.year = year
            self.month = month
            self.day = day
    
        def date(self):
            return '%s-%s-%s'%(self.year,self.month,self.day)
    #
    class Student:
        def __init__(self,name,num,birth,in_shcool,start_day):
            self.name = name
            self.num = num
            self.birth = birth          # 组合
            self.in_school = in_shcool  # 组合
            self.start_day = start_day  # 组合
    
    d1 = Date(1999,10,27)
    d2 = Date(2019,1,9)
    d3 = Date(2019,2,9)
    alex = Student('alex',10086,d1,d2,d3)
    print(alex.birth.year)         #1999
    print(alex.birth.month)        #10 
    print(alex.birth.day)          #27
    print(alex.birth.date())       #1999-10-27
    
    alex.start_day.month +=1
    print(alex.start_day.date())   #2019-3-9
    学生类与日期类
    class Student:
        def __init__(self,name,num,course):
            self.name = name
            self.num = num
            self.course = course
    
    class Course:
        def __init__(self,name,price,period):
            self.name = name
            self.price = price
            self.period = period
    python = Course('python',25000,'6 months')
    s1 = Student('alex',10085,python)
    s2 = Student('taibai',10084,python)
    
    print(s1.__dict__)        #{'name': 'alex', 'num': 10085, 'course': <__main__.Course object at 0x000001EB9FA5D9E8>}
    print(s1.course.price)    #25000
    python.price = 30000
    python.period = '7 months'
    
    print(s2.course.period)   #7 months
    学生类与课程类
  • 相关阅读:
    Flutter竟然发布了1.5版本!!!!
    微软最爽命令行工具发布!
    被忽略的CSS规则
    代码精进之路读后感(六-结束篇)
    深入解析QML引擎, 第4部分: 自定义解析器
    深入解析QML引擎, 第3部分: 绑定类型
    深入解析QML引擎, 第2部分: 绑定(Bindings)
    编译V8过程全纪录
    面试总结
    Qt网络编程
  • 原文地址:https://www.cnblogs.com/Xiao_Xu/p/10601790.html
Copyright © 2011-2022 走看看