美文网首页
面向对象 -- 继承

面向对象 -- 继承

作者: __深蓝__ | 来源:发表于2019-01-10 15:13 被阅读0次

继承,体现类的可扩展性,实现代码重用,相同的代码不需要重复编写

单继承
class 类名(父类名):
    pass
  • 子类可以继承父类,直接使用父类中的公有属性和方法
  • 子类不能直接访问父类的私有属性,只能通过父类的get/set方法访问
  • 子类可以增加特有的属性和方法
  • 方法的重写
  • 父类的方法实现不能满足子类需求时,可以对方法进行重写(override)
  • 在子类中定义了一个和父类同名的方法并且实现,在运行时就会调用子类中重写的方法,而不会调用父类的方法
  • 因为Python中没有方法重载,所以重写时不存在父类方法重名问题
class Parent:        # 定义父类
   def myMethod(self):
      print ('调用父类方法')
 
class Child(Parent): # 定义子类
   def myMethod(self):
      print ('调用子类方法')
 
c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法

调用子类方法
  • super方法

在继承条件下,如果要调用父类的方法,可以使用super方法

super( ).__init__( 父类属性 )

子类对象的初始化属性原则是:

  • 子类新增的属性由子类初始化
  • 继承来的属性调用父类的__init__方法来初始化
class Base:
    def __init__(self, basename):
        self.basename = basename

class Sub(Base):
    def __init__(self, basename, subname):
        super().__init__(basename)  # 不能使用 super().basename = basename
        self.subname = subname
  • 在类使用super(子类名, self).父类方法名()的形式调用父类方法
  • 在类使用super(子类名, 子类对象).父类方法名()的形式调用父类方法
class Base:
    def base_func(self):
        print('base_func()')

class Sub(Base):
    pass

if __name__ == '__main__':
    s = Sub()
    super(Sub, s).base_func()

多继承

子类可以拥有多个父类,并且具有所有父类的属性和方法

class 子类名( 父类名1, 父类名2 ... )
    pass
  • 如果多个父类存在同名的属性或方法,应该避免使用多继承
  • Python中提供了一个内置属性__mro__,用来查看方法的搜索顺序
  • MRO (method resolution order),用于判断多继承时方法、属性的调用顺序
  • 搜索时,是按照__mro__从左至右顺序查找,如果在当前类中找到方法,就直接执行,不再搜索
  • 如果没有找到,就查找下一个类中是否有对应的方法,如果找到就直接执行,不再搜索
  • 如果找到最后一个类,还没有找到方法,程序报错




- end -

相关文章

  • JavaScript之面向对象编程

    五、面向对象编程 目录:面向对象原型继承、面向对象class继承(ES6引入的) 1.面向对象原型继承 类:模板 ...

  • 王艳华Pythonday03

    Python的面向对象 Java 面向对象 继承

  • Python面向对象继承

    面向对象继承 面向对象编程 (OOP),英语全称:Object Oriented Programming,面向对象...

  • java基础-day10-面向对象4.0

    面向对象4.0 1. 面向对象之继承 1.1 生活中的继承 1.2 Java中的继承 1.3 子类对象创建,会调...

  • 面对对象高级编程

    面向对象高级编程: 面向对象编程:封装、继承和多态 面向对象高级编程:多重继承、定制类和元类

  • Web前端经典面试试题及答案2

    javascript面向对象中继承实现? 面向对象的基本特征有:封闭、继承、多态。在JavaScript中实现继承...

  • JAVA语言第二课

    JAVA面向对象——四大特征 继承篇——extendsJava 继承继承的概念继承是java面向对象编程技术的...

  • js面向对象设计

    面向对象模式 继承

  • JavaScript 面向对象编程

    JavaScript 快速入门 面向对象编程创建对象构造函数忘记写new怎么办?原型继承class继承 面向对象编...

  • 面向对象:创建对象&继承

    博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...

网友评论

      本文标题:面向对象 -- 继承

      本文链接:https://www.haomeiwen.com/subject/wyadrqtx.html