10+实战课程看透面向对象的三大特性:封装、继承和多态-阿里云开发者社区

开发者社区> Python学习站> 正文

10+实战课程看透面向对象的三大特性:封装、继承和多态

简介: 面向对象编程,简单来说就是基于对类和对象的使用。本文来为大家介绍面向对象的三大特性——封装、继承、多态。

面向对象编程,简单来说就是基于对类和对象的使用。本文来为大家介绍面向对象的三大特性——封装、继承、多态。

封装

第一节:封装的简介

上一节我们讲过:直接通过 对象.属性 的方式来修改属性的值会导致对象中的属性可以随意修改,这是非常的不安全的:因为值可以任意修改,不论对错。

这里我们将介绍一种方法来更好的保护数据,保证数据的安全性:封装。

封装是面向对象的三大特性之一。

封装指的是隐藏对象中一些不希望被外部所访问到的属性或方法>>点击链接查看更多关于封装的内容

第二节:隐藏类中的属性

本文介绍了隐藏类中的属性的2种方法,避免外部可以随意访问。

并通过实际的案例详述了私有属性的建设和调用的方法>>点击链接了解详情

第三节:property装饰器

property装饰器,用来将一个get方法,转换为对象的属性,添加为property装饰器以后,我们就可以像调用属性一样使用get方法。

但是由于我们只提供了get方法而没有set方法,所以不能修改值。此时需要提供set方法进行修改。

要求:使用property装饰的方法,必须和属性名是一样的。>>点击链接了解更多

继承

第一节:继承简介

如果有一个类,能够实现我们需要的大部分功能,但是不能实现全部功能,那么如何能让这个类来实现全部的功能呢?
① 直接修改这个类,在这个类中添加我们需要的功能,这种方式修改起来会比较麻烦,并且会违反OCP原则。(开闭原则),我们不推荐使用这种方式。
② 创建一个新的类这是比较麻烦的,并且需要大量的进行复制粘贴,会出现大量的重复性代码。这种方式也不太适合。
③ 直接从父类中来继承它的属性和方法

  • 通过继承我们可以使一个类获取到其他类中的属性和方法
  • 在定义类时,可以在类名后的括号中指定当前类的父类(超类、基类、super),子类(衍生类)可以直接继承父类中的所有的属性和方法

那该如何用代码实现继承呢?>>点击链接查看详情

第二节:方法的重写override

如果在子类中如果有和父类同名的方法,则通过子类实例去调用方法时,会调用子类的方法而不是父类的方法,这个特点我们成为叫做方法的重写(覆盖,override)。可以确保在继承父类方法之后,自身还可以做出简单的修改。

同时注意:当我们调用一个对象的方法时,会优先去当前对象中寻找是否具有该方法,如果有则直接调用。如果没有,则去当前对象的父类中寻找,如果父类中有则直接调用父类中的方法,如果没有,则去父类的父类中寻找,以此类推,直到找到object,如果依然没有找到,则报错。>>点击链接了解更多

第三节:Python内置函数之super()

super() 函数是用于调用父类(超类)的一个方法。

它是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

当程序中的方法被写死,只能调用父类中的属性时,如果子类的父类更换,那么需要更新的代码是非常多的,所以就需要一个动态获取父类的方法。

super() 可以用来获取当前类的父类,并且通过super()返回对象调用父类方法时,不需要传递self。>>点击链接查看更多

第四节:多重继承

多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的方法。

在Python中是支持多重继承的,也就是我们可以为一个类同时指定多个父类。这是与别的大部分语言不一致的。但在开发中没有特殊的情况,应该尽量避免使用多重继承,因为多重继承会让我们的代码过于复杂。

注意:如果多个父类中有同名的方法,则会现在第一个父类中寻找,然后找第二个,然后找第三个......前边父类的方法会覆盖后边父类的方法。>>点击链接了解更多

多态

第一节:多态简介

多态是面向对象的三大特征之一。

多态从字面上理解是多种形态。例如:狗有多个种类(狼狗、藏獒、哈士奇、古代牧羊犬...)。

一个对象可以以不同的形态去呈现。>>点击链接了解多态的实现方法

第二节:类的属性和方法

在之前的课程中我们讲过为什么实例可以访问到类中的属性和方法?那是因为类中定义的属性和方法都是公共的,任何该类实例都可以访问。

当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否含有该属性,如果有,则直接返回当前的对象的属性值,如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值,如果没有则报错!

在这里做一些深入的研究:静态方法不需要指定任何的默认参数,静态方法可以通过类和实例去调用 。

静态方法,基本上是一个和当前类无关的方法,它只是一个保存到当前类中的函数。静态方法一般都是一些工具方法,和当前类无关。>>点击链接了解更多

第三节:Python的垃圾回收机制

就像我们生活中会产生垃圾一样,程序在运行过程当中也会产生垃圾。

程序运行过程中产生的垃圾会影响到程序的运行的运行性能,所以这些垃圾必须被及时清理。

什么是垃圾?在程序中没有被引用的对象就是垃圾,这种垃圾对象过多以后会影响到程序的运行的性能。所以我们必须进行及时的垃圾回收,所谓的垃圾回收就是讲垃圾对象从内存中删除。

在Python中有自动的垃圾回收机制,它会自动将这些没有被引用的对象删除,所以我们不用手动处理垃圾回收。

在Python中有一些特殊的方法可实现垃圾回收的功能,比如:init、del>>点击链接了解更多

第四节:Python中的魔术方法

特殊方法,也称为魔术方法。它们都是使用__开头和结尾的。例如: __init__、__del__`。

特殊方法一般不需要我们手动调用,需要在一些特殊情况下自动执行。

我们在需要的时候去调用就可以了。这些方法都是对多态的体现。>>点击链接了解更多内容

最后来简单的总结一下面向对象的三大特征:
封装:确保对象中的数据安全
继承:保证了对象的可扩展性
多态:保证了程序的灵活性

了解更多有关Python的内容,请订阅Python学习站官方技术圈!!

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

Python学习资料大全,包含Python编程学习、实战案例分享、开发者必知词条等内容。

官方博客
官网链接