美文网首页
7.面向对象三大特性

7.面向对象三大特性

作者: 芝麻酱的简书 | 来源:发表于2018-08-16 18:26 被阅读10次

特性1 继承:

class Dad:
    "这是爹"
    id_num = 123

    def __init__(self, name):
        self.name = name


class Son(Dad):
    pass

print(Dad.__dict__)
print(Son.__dict__)
接口继承与归一化设计:

使用abc(Abstract Bass Class)模块

import abc


class Dad(metaclass=abc.ABCMeta):

    # 声明抽象方法
    @abc.abstractmethod
    def __init__(self, name):
        self.name = name


class Son(Dad):
    # 子类必须实现父类的抽象方法__init__
    pass
多继承:

Python多继承,属性寻找方法有两种:

  • 深度优先
  • 广度优先

例如上图继承关系,W继承自D和E,W中的查找关系是:
①深度优先的话:W -> D -> B -> A -> E -> C
②广度优先的话:W -> D -> B --> E -> C -> A

经典类多继承情况下,会按照深度优先的方式查找,python2中,通通过查看根类是新式类还是经典类来判断子类的类型;
新式类多继承情况下,会按照广度优先的方式查找,python3中全部都是新式类;

对于我们定义的类,python会计算出一个方法解析顺序MRO列表,也就是一个简单的所有基类的线性顺序列表。

🎈总结遵循以下三条原则:

  1. 子类会先于父类被检查
  2. 多个父类会根据他们在列表中的顺序被检查
  3. 如果对下一个类存在两个合法的选择,选择第一个父类

新式类可以使用__mro__查看继承列表

重写父类方法:

子类中使用super调用父类方法来覆盖重写:

class Dad(metaclass=abc.ABCMeta):
    def __init__(self, name):
        self.name = name

class Son(Dad):
    def __init__(self, name, age):
        # Dad.__init__(self, name)
        super().__init__(name)
        self.age = age


result = Son("bill", 12)


特性2 多态:

运行时绑定状态



特性3 封装:

约定:

  • 使用_来封装属性为私有属性: _age = 10
  • 使用__开头的属性,Python会对其自动改名为_class__x: __age -> __class_age

使用双下划线声明的属性,在继承给子类的时候,子类是无法覆盖的,原因就是python自动重命名了

相关文章

  • 7.面向对象三大特性

    特性1 继承: 接口继承与归一化设计: 使用abc(Abstract Bass Class)模块 多继承: Pyt...

  • 面向对象编程(二)

    面向对象编程(二) -------面向对象的基本特性 1、面向对象的基本特性 面向对象的编程是把现实客观存在的...

  • 面向对象

    面向对象:OOP 面向对象三大特性

  • 面向对象语言基础

    面向对象语言的特性 面向对象的语言的特性:封装、继承、多态。 面向对象语言的设计原则 面向对象的语言在进行程序设计...

  • 面向对象三大特性(一):封装

    面向对象有三大特性:封装、继承和多态。注意,是面向对象的三大特性而不是Java的三大特性,Java只是面向对象语言...

  • Class 的封装及调用-Python教学【StudyQuant

    前言:面向对象的三大特性是指:封装、继承和多态。论Class 的封装及调用 面向对象三大特性 面向对象的三大特性是...

  • 理解面向对象

    理解面向对象 阅读知乎大牛对面向对象的讨论后,写下自己的总结和理解。知乎 面向对象的原本特性 面向对象原本的特性(...

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

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

  • 面向对象特性

    面向对象主要由三大特性: 封装继承多态 1.封装:封装的思想保证了类内部数据结构的完整性,使用户无法轻易直接操作类...

  • 面向对象特性

    1、类(Class)类是ts的核心,使用ts开发时,大部分代码是写在类里面的。类的定义、构造函数、类的继承;类的定...

网友评论

      本文标题:7.面向对象三大特性

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