• 面向对象的三大特性之继承


    # 面向对象的三大特性之继承
    
    # 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好 (如机器人)
    # 当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好 (动物——猫)
    # 继承同时有两种含义:1,继承基类的方法,并且做出自己的改变或扩展(代码重用),这种意义并不大,因为它使子类和基类出现强耦合
    #           2,声明某个子类兼容于某基类。定义一个接口类,子类继承接口类,并实现接口中定义的方法
    #              接口继承只是接口类规定了子类必须实现的方法,但是接口类里不去实现,子类继承后,在子类中再写具体实现的方法
    #              可以导入abc模块,并使用装饰器@abc.abstractmethod,限定子类必须要定义接口类中的方法
    
    
    import abc  # 导入abc模块
    
    
    class AllFile(metaclass=abc.ABCMeta):  # 定义接口类
        @abc.abstractmethod  # 使用装饰器,限定子类中必须要定义下面的方法
        def read(self):  # 仅有方法名称,并没有具体内容,仅是为了规范子类
            pass
    
        @abc.abstractmethod
        def write(self):
            pass
    
    
    class Disk(AllFile):  # 子类Disk继承AllFile接口类
        def read(self):  # 必须定义接口提供的两个方法,否则实例化时会报错
            print('Disk read')  # 方法的具体实现代码
    
        def write(self):
            print('Disk write')
    
    
    class Cdrom(AllFile):
        def read(self):
            print('Disk read')
    
        def write(self):
            print('Disk write')
    
    
    d = Disk()
    
    # 新式类的继承顺序(广度优先)
    print(Disk.__mro__)  # 显示新式类的继承顺序方法1
    print(Disk.mro())  # 显示新式类的继承顺序方法2
    
    
    # 子类中调用父类的方法
    class Vehicle:
        country = 'China'
    
        def __init__(self, name, speed, load, power):
            self.name = name
            self.speed = speed
            self.load = load
            self.power = power
    
        def run(self):
            print('父类方法')
    
    
    class Subway(Vehicle):
        def __init__(self, name, speed, load, power, line):
            super().__init__(name, speed, load, power)  # 通过super()调用父类的方法
            self.line = line  # 子类
    
        def show_info(self):
            print(self.name, self.speed, self.load, self.power, self.line)
    
        def run(self):
            super().run()
            print('子类方法')
    
    
    line13 = Subway('北京地铁', '10km/s', 10000, '', 13)
    line13.show_info()
    line13.run()
  • 相关阅读:
    关于gtk的GCond
    位运算符及其应用
    登陆新浪微博&批量下载收藏内容[Python脚本实现]
    海量数据处理算法—Bloom Filter
    海量数据处理算法—BitMap
    VB.NET机房收费系统——组合查询
    非官方的gstreamer学习资料及概念摘要
    [Python入门及进阶笔记00]写在前面(目录/书籍/学习路线/其他)
    [JAVA][Eclipse]JVM terminated. Exit code=13
    介绍一个android开源文件选择对话框:androidfiledialog
  • 原文地址:https://www.cnblogs.com/dangrui0725/p/9457877.html
Copyright © 2020-2023  润新知