码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-08-11 01:29:54      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:优先   模块   __init__   div   span   需要   code   很多   功能   

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

# 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好 (如机器人)
# 当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好 (动物——猫)
# 继承同时有两种含义: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()

 

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

标签:优先   模块   __init__   div   span   需要   code   很多   功能   

原文地址:https://www.cnblogs.com/dangrui0725/p/9457877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!