面向对象特性—继承与接口(三十)

import abc

class AllFile(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def read(self):
        pass
    # 父类定义抽象的方法,子类必须实现
    @abc.abstractmethod
    def write(self):
        pass

class Txt(AllFile):
    def read(self):
        print("txt read")
    def write(self):
        print("txt write")

class Mem(AllFile):
    def read(self):
        print("mem read")
    def write(self):
        print("mem write")

m = Mem()
m.read()
m.write()

继承顺序:

Java ,C#只能继承一个类,Python可以继承多个类

class A:
    def test(self):
        print("this is A")

class B(A):
    # def test(self):
    #     print("this is B")
    pass

class D(B):
    # def test(self):
    #     print("this is D")
    pass

class C(A):
    # def test(self):
    #     print("this is C")
    pass

class E(C):
    # def test(self):
    #     print("this is E")
    pass

class F(D,E):
    # def test(self):
    #     print("this is F")
    pass

print(F.__mro__)
‘‘‘
F.__mro__ 揭秘了F的继承顺序
(<class ‘__main__.F‘>, <class ‘__main__.D‘>, <class ‘__main__.B‘>,
<class ‘__main__.E‘>, <class ‘__main__.C‘>, <class ‘__main__.A‘>, <class ‘object‘>)
‘‘‘
f = F()
f.test() # F-->D-->B-->E-->C-->A

Python会计算一个方法解析顺序(MRO) 列表,这个列表就是一个简单的所有基类的线性顺序表

注意:Python2 与Python3 中的继承顺序是不一样的

子类中调用父类的方法

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("running...")

class Subway(Vehicle):
    def __init__(self,name,speed,load,power,line):
        Vehicle.__init__(self,name,speed,load,power)
        self.Line = line

    def show_info(self):
        print("%s %d号线" %(self.Name,self.Line))

    def run(self):
        Vehicle.run(self)
        print("%s %d号线,以%s的速度在运行" %(self.Name,self.Line,self.Speed))

line3 = Subway("深圳地铁","100km/s",10000,"电",3)
line3.show_info()
line3.run()
‘‘‘
深圳地铁 3号线
running...
深圳地铁 3号线,以100km/s的速度在运行
‘‘‘

super调用父类的方法

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("running...")

class Subway(Vehicle):
    def __init__(self,name,speed,load,power,line):
        # Vehicle.__init__(self,name,speed,load,power)
        super().__init__(name,speed,load,power)
        self.Line = line

    def show_info(self):
        print("%s %d号线" %(self.Name,self.Line))

    def run(self):
        # Vehicle.run(self)
        super().run()
        print("%s %d号线,以%s的速度在运行" %(self.Name,self.Line,self.Speed))

line3 = Subway("深圳地铁","100km/s",10000,"电",3)
line3.show_info()
line3.run()
‘‘‘
深圳地铁 3号线
running...
深圳地铁 3号线,以100km/s的速度在运行
‘‘‘

原文地址:https://www.cnblogs.com/xiangtingshen/p/10459741.html

时间: 2024-10-17 08:02:09

面向对象特性—继承与接口(三十)的相关文章

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

面向对象,继承和接口的使用理解

面向对象: 将你要将各种小类组合成一个大类的时候,面向对象的思想只需要在大类中添加一个小类的实例.这样可以提升代码的重用率. 继承: 当需要对父类进行扩张来得到一个拥有一些额外方法或者属性的时候使用.当父类的一些东西需要重写时使用也相当重要.抽象类:抽象类.中的抽象方法必须被实现,而可以有非abstract的方法和数据.这就区别于接口使得它更加灵活.在某些特定方法只会在这个类的子类中需要使用的时候,就没有必要特地为这个方法书写一个接口.抽象类用于抽象一个实际物品的时候特别有效. 接口: 因为接口

Python面向对象特性 - 继承

面向对象有3大特性:继承.多态.封装,本章介绍 Python中的 继承 特性~? 什么是继承 继承是创建类的一种方式,在 Python中支持多继承,即在创建类的时候可以继承一个或者多个父类.在继承关系中,被继承的类通常称为父类(或超类,基类),新建的类则称为子类(或派生类).?继承的优势在于可以有效地重用代码,提高代码的可读性~?继承示例: class Fu_1: # 父类 pass class Fu_2: # 父类 pass class Zi_1(Fu_1): # 单继承 pass class

面向对象1 继承与接口

类的相关知识 定义教师类: class Teacher: school = '偶的博爱' # (egon_obj,'egon',18) def __init__(self, name, age): self.name = name # egon_obj.name='egon' #egon_obj.__dict__['name']='egon' self.age = age # egon_obj.age=18 #teach(egon_obj) def teach(self): print('%s

不同的继承方式(三十八)

我们之前在学习继承的时候,冒号(:)表示继承关系,Parent 表示被继承的类,而 public 的意义又是什么呢?我们知道,C++ 中的跟 public 对应的关键字还有 protected 和 private,那么是否可以将继承语句中的 public 换成 protected 或者 private 呢?如果可以的话,它们与 public 继承又有什么区别呢? 我们来尝试下 #include <iostream> #include <string> using namespace

Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript时,可以选择面向过程的方式编程,显得高效:但在实际工作中,遇到的项目需求和框架较大的情况下,选择面向对象的方式编程显得尤其重要,Javascript原生语法中没有提供表述面向对象语言特性的关键字和语法(如extends.implement).为了实现这些面向对象的特性,需要额外编写一些代码,如下.

面向对象,封装,构造方法,this关键字,main,继承,接口,多态阶段性小结

一.局部变量和成员变量 成员变量:  定义在类中变量 局部变量:  定义在方法中变量 1成员变量与局部变量的区别: 应用范围 成员变量在整个类内都有效 局部变量只在其声明的方法内有效 生命周期   成员变量: 它属于对象,它随着对象的创建而创建,随着对象的消失而消失 局部变量: 使用完马上释放空间. 存储位置  成员变量属于对象,它存储在堆内,堆内的实体,当没有引用指向其时,才垃圾回收清理 局部变量存在栈内存中,当不在使用时,马上就会被释放. 初始值 成员变量它存储在堆中,如果没有赋初值,它有默

12.面向对象(继承/super/接口/抽象类)

面向对象继承与派生继承继承顺序继承原理子类调用父类的方法(super)组合接口接口的概念:接口的概念解释和使用:python中的接口:抽象类 面向对象 继承与派生 继承 什么是继承?继承是一种创建新的类的方式 class A: pass class B(A): pass 在python中,新建的类可以继承自一个或者多个父类,原始类称为基类或者超类,新建的类称为派生类或者子类 python中类的继承分为,单继承和多继承. 查看继承的方法B.__bases__ 如果没有指定基类,python的类会默

面向对象(二)——继承、派生、组合以及接口

一.继承与派生 1.1 什么是继承 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 Python中类的继承分为:单继承和多继承 class People: # 定义父类 def __init__(self,name,age): self.name=name self.age=age def walk(self): print('%s is walking' %self) class Teacher(People): #