最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Python教程:如何理解封装、继承和多态

XAMPP案例 admin 670浏览 0评论
封装、继承和多态是类的三大特性,不仅 python 中类具有这三个特性,其他面向对象的语言如 java 中类也有这三个特性。那么如何理解这三个特性呢?
一、封装
封装就是指将数据与具体操作的实现代码放在某个对象内部,使这些代码的实现细节不被外界发现,外界只能通过接口使用该对象,而不能通过任何形式修改对象内部的实现。
使用封装能隐藏对象的实现细节,使代码更易维护,同时因为不能直接调用、修改对象内部的私有信息,在一定程度上保证了系统安全性。
类通过将函数和变量封装在内部,实现了比函数更高一级的封装。
二、继承
继承机制实现了代码的复用。多个类公用的代码部分可以只在一个类中提供,而其他类只需要继承这个类即可。
子类可以继承父类的全部变量和方法,并且可以根据需要重新进行修改或扩展。
python 支持多继承的机制。也就是可以一个子类继承多个父类。
class DerivedClassName(Base1, Base2, Base3, Base4):  <statement>            ...        <statement>
在最简单的情况下,可以认为搜索从父类所继承属性的操作是深度优先、从左至右的,当层次结构中存在重叠时不会在同一个类中搜索两次。
因此,如果某一属性在 DerivedClassName 中未找到,则会到 Base1 中搜索它,然后(递归地)到 Base1 的基类中搜索,如果在那里未找到,再到 Base2 中搜索,依此类推。
python3 的继承机制不同于 python2:
  • 子类在调用某个方法或变量时,现在子类内部进行查找,如果没有再去查找父类的
  • 根据父类定义中的顺序,以深度优先的方式逐一查找父类。

关于多继承:

1)从左到右的原则

如果多个父类有相同的方法,那么优先继承写在前面的。

drr00048

2)深度优先的原则

什么是 深度优先?

如果上面那个例子中 B 中没有 show 方法,D中有,那么结果是什么?
drr000048

3)层次结构存在重叠,不会在同一个类中重复查找两次

如果类 D 和 类 G同时继承了 H,并且只有 H 和 E 中有 show 方法,那么结果是什么?
drr0000048

super() 函数

如果子类中有和父类中同名的成员,那么会覆盖掉父类中的成员,也就是发生了重写。如果想强制调用父类里的成员,那么就可以使用 super() 函数。
最常见的就是子类要定义自己的 __init__ 方法,要通过 super 调用父类中的 __init__方法
语法:super(子类名,self).方法名
drr47
输出结果:
drr047

三、对多态的理解

1.多态

多态是指一类事物可以有多种形态。比如动物类,可以有猫、狗、猪等。(也就是一个抽象类可以有多个子类,依赖于继承)
drr0047

2. 多态性

多态性是指具有不同功能的函数又可以使用相同的函数名,这样就可以用一个函数名调用不同的函数。
drr00047
输出结果:
drr000047
调用不同的子类产生不同的行为,而无须明确知道这个子类在干什么,这是多态的重要应用场景。
由于 python 语言的动态特性,所以传入 func 函数中的 animal 参数可以是任何类型,只要他有 kind 方法就可以。
鸭子类型是动态类型的一种风格。在这种风格中,一个对象有效的语义由”当前方法和属性的集合”决定。
概念的名字来源于由James Whitcomb Riley提出的鸭子测试,“鸭子测试”可以这样表述:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。

转载请注明:XAMPP中文组官网 » Python教程:如何理解封装、继承和多态

您必须 登录 才能发表评论!