Python Day 20 面向对象 (面向对象的组合用法,面向对象的三大特性

Python Day 20 面向对象(面向对象的三大特性 - 继承)

https://mubu.com/doc/1AqL_M0IbW

组合

  软件重用的重要方式除了继承之外还有另外一种方式,即:组合,组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合。

  用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好

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

class Circle:
    def __init__(self,lenth,pi=3.14):
        self.lenth = lenth
        self.pi = pi
    def perimeter(self):
        return self.pi*self.lenth**2
    def area(self):
        return 2*self.pi*self.lenth

class Ring:
    def __init__(self,out_r,in_r):
        self.out_circle = Circle(out_r)
        self.in_circle = Circle(in_r)
    def ring_perimeter(self):
        return self.out_circle.perimeter() + self.in_circle.perimeter()
    def ring_area(self):
        return self.out_circle.area() - self.in_circle.area()

r = Ring(10,5)
print(r.ring_perimeter())
print(r.ring_area())
View Code

继承

  继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类

  python中类的继承分为:单继承和多继承。

class ParentClass1: #定义父类
    pass

class ParentClass2: #定义父类
    pass

class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass
    pass

class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类
    pass

    查看继承

>>> SubClass1.__bases__ #__base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类
(<class '__main__.ParentClass1'>,)
>>> SubClass2.__bases__
(<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)
View Code

提示:如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如__str__)的实现。

原文地址:https://www.cnblogs.com/eailoo/p/9089041.html