本文讲述python继承规则。

先来看一些概念:

面向对象的概念
简单地说 面向对象编程(Object Oriented Programming)简称OOP 就是使我们分析、设计 和实现一个系统的方法尽可能地接近我们认识一个系统的方法。
1、描述对象之间的相互作用 。
2、面向对象的方法包括,面向对象的分析(OOA, Object-Oriented Analysis) 、
面向对象的设计(OOD, Object-Oriented Design)、面向对象的程序设计(OOP, Object-Oriented Program) 。
3、面向对象技术主要围绕以下几个概念,对象、抽象数据类型、类、类型层次(子类)、继承性、多态性。

对比:

面向过程
过程化设计先确定算法,再确定数据结构;面向过程的程序员习惯于建立数据结构存放数 据并定义方法(函数)来操作数据;

面向对象
面向对象编程先确定数据结构,再确定算法;而面向对象程序员则构造对象模型,将数据 与方法组织在一起。
面向对象程序设计方法的优点 可重用性 可扩展性 可管理性

抽象 :对具体问题(对象)进行概括,抽出这一类对象的 公共性质并加以描述的过程。要求:先注意问题的本质及描述,其次是实现过程或细节。

数据抽象—描述某类对象的属性或状态(对象相互区别的 物理量)
代码抽象—描述某类对象的共有的行为特征或具有的功 能。

类:是描述对象的“基本原型”,它定义一类对象所能拥有的数 据和能完成的操作。
在面向对象的程序设计中,类是程序的基本单元。相似的对象可以归并到同一个类中去,就像传统语言中的 变量与类型关系一样。

从程序设计的角度看,类是面向对象程序中最基本的程序单元,类实质上定义的是一种数 据类型,这种数据类型就是对象类型,我们可以使用类名称来声明对象变量。

对象 :它是具有该类类型的一个特定的个体,是类的一个 变量。

对象的构造过程 :1.为对象开辟空间; 2.调用构造方法初始化; 3.返回对象的引用。

类是对象的模板,同一个类可以创建多个对象,每个对象 有各自的内存空间,不会互相影响

默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修 饰成员函数和成员变量。

在python中定义私有变量只需要在变量名或函数名前加 上 ”__“两个下划线,那么这个函数或变量就是私有的了。

1、_xxx "单下划线 " 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量。
2、__xxx 类中的私有变量/方法名 (Python的函数 也是对象,所以成员方法称为成员变量也行得通。), " 双下划线 " 开始的是私有成员,意思是只有类对象自己 能访问,连子类对象也不能访问到这个数据。
3、)__xxx__ 系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,如 __init__()代表 类的构造函数。

封装:行为和属性的结合。

含义:提供将所抽象出的问题的属性(数据成员)和行为 (代码成员)相组合的一种机制,它能将这二类成员再组 合在一起,形成对象或实体。

目的:增强使用的安全性,使用者不必了解具体的实现细 节,而只需要通过设计者提供的外部接口来操作它。 优点:实现高度模块化,从而产生出软件构件(控件); 利用控件快速地组装程序。 客户可以调用一个并不了解内部机制的对象的方法 任何关于内部的改动对客户来说都是隐藏的。

继承:继承是由已有的类创建新类的机制。由继承得到的类称为子类(派生类),被继承的类称为父类 (超类)(基类)。

继承的原则 :
1、子类继承父类的成员变量和成员方法
2、子类不继承父类的构造方法,能够继承父类的析构方法
3、子类不能删除父类的成员,但可以重定义父类成员
4、子类可以增加自己的成员

继承的作用 :
1、实现软件可重用的重要方式
2、增强软件可扩充性
3、提高软件的可维护性

面向对象中的两个重要概念:抽象和分类。

抽象和分类是人们认识世界的基本方法:

抽象是将现实世界中客观存在的事务映射到意识中的一种 方法。
分类是指确定这些抽象到意识中的概念之间的关系。
这些关系的基本形式包括一般到特殊和整体与局部。

在面向对象中,一般到特殊的关系用继承(Inheritance)表 示;整体与局部的关系用组合(composition)表示。(在之前的博客中也将到这个问题)

Super()用法 :
1、super()用来引用当前对象的父类,用super()可以实现对 父类成员的访问。
访问父类被隐藏的成员变量,如: super().variable
2、调用父类中被覆盖的方法,如: super().Method([paramlist])
3、调用父类的构造函数,如: super().__init__([paramlist])

多态 :
一个对象在不同的情况下,具有不同的形态,用于强类型语言。是使用在继承和接口中实现。
多态:定义时的类型和运行时的类型不一样,此时就成为多态
python中的多态主要得益于python的鸭子类型,之前的博客中讲过,这里不再多说。

多态的作用: 提高程序的扩展性

实例属性,类属性/方法,静态方法 :
类属性 :直接在类中定义的,与方法平齐,不在方法里的属性就是类属性
实例属性 :在方法里通过self.属性都是实例属性 。

类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似。

对于公有的类属性,在类外可以通过类对象和实例对象访 问。

类方法 :是类对象所拥有的方法,需要用修饰器@classmethod。
(注解、元数据)来标识其为类方法,对于类方法,第一 个参数必须是类对象,一般以cls作为第一个参数(当然可 以用其他名称的变量作为其第一个参数,但是大部分人都 习惯以’cls‘作为第一个参数的名字,就最好用’cls'了),能 够通过实例对象和类对象去访问。

静态方法 :
需要通过修饰器@staticmethod来进行修饰,静态方法不 需要多定义参数。
从类方法和实例方法以及静态方法的定义形式就可以看出 来, 类方法的第一个参数是类对象cls,那么通过cls引用的必定 是类对象的属性和方法;

而实例方法的第一个参数是实例对象self,那么通过self引 用的可能是类属性、也有可能是实例属性(这个需要具体 分析),不过在存在相同名称的类属性和实例属性的情况 下,实例属性优先级更高。

静态方法中不需要额外定义参数,因此在静态方法中引用 类属性的话,必须通过类对象来引用。

总结 :
方法是代码重用的重要手段,控制好代码被访问的程度 可以加强代码的安全性, 封装、继承和多态是面向对象的基本特征 ,封装特性通过访问权限的设定将类的实现细节隐藏,提供 接口供外部访问 ,继承和组合是类间的基本关系,是软件复用的重要方法 ,多态是面向对象的重要标志。
————————————————
版权声明:本文为CSDN博主「MZP_man」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MZP_man/article/details/100029713

python 继承的规则相关推荐

  1. python的继承用法_【后端开发】python中继承有什么用法?python继承的用法详解

    本篇文章给大家带来的内容是关于python中继承有什么用法?python继承的用法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 面向对象三大特征 1.封装:根据职责将属性和方法 ...

  2. 深入研究Python 世界的规则,我的薪资直接翻倍

    前言 编程,其实和玩电子游戏有一些相似之处.你在玩不同游戏前,需要先学习每个游戏的不同规则,只有熟悉和灵活运用游戏规则,才更有可能在游戏中获胜. 而编程也是一样,不同编程语言同样有着不一样的" ...

  3. Python继承范例

    Hello everyone to python inheritance example. In our last tutorial, we learned about python operator ...

  4. PEP 8 -- Python代码格式规则

    PEP 8 – Python代码格式规则 PEP: 8 标题: Python代码格式规则(Style Guide for Python Code) 作者: Guido van Rossum (guid ...

  5. python 继承和多态

    python 继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Ba ...

  6. python编程语言继承_python应用:学习笔记(Python继承)

    学习笔记(Python继承)Python是一种解释型脚本语言,可以应用于以下领域: web 和 Internet开发 科学计算和统计 人工智能 教育 桌面界面开发 后端开发 网络爬虫 有几种叫法(父类 ...

  7. python继承——封装

    python继承--封装 1 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度 2 封装分为两个层面 第一个层面的封装(什么都不用做):创建类和对象会分别创建二者的名称空 ...

  8. java继承方法规则或规律

       方法的继承与属性的继承有很大的不同,属性任何继承方式均可,而方法则有各种限制,于是动力节点Java培训机构小编在这里做了一个简单的总结. 1.修饰符相同的方法覆盖,即只改内部,不改外部 2.访问 ...

  9. python继承问题_深入浅析python继承问题

    有如下的代码: class p1: def __init__(self,a,b): print("init in p1") self.a1=a self.b1=b self.f1( ...

最新文章

  1. CV大咖齐聚于此,追忆一代宗师Thomas S. Huang为人、为师、为学
  2. jQuery如何选择表格每行中的第三列?
  3. activiti 批量 mysql_Activiti6系列(3)- 快速体验
  4. java jdk安装教程win10_win10系统安装java的详细步骤(图文)
  5. 测试化验加工费云服务器文献信息,监管▕ 科研经费使用中的 “红线”和“禁区”典型问题自查清单...
  6. neutron用linux_bridge部署provider网络
  7. C语言中数据的输出格式有哪些?
  8. SSIM公式:结构相似性计算原理,基于SSIM的图像质量评价
  9. jpg格式如何转eps路径_jpg/png格式图片转eps格式的方法总结
  10. mysql instead of触发_mysql 触发器
  11. STM32中挂载SDRAM内存说明
  12. 局部语义地图构建——HDMapNet
  13. 单片机中动态数码管闪烁问题
  14. pc端生成支付宝支付二维码
  15. Linux命令find -perm使用方法
  16. MWC 2018火热开幕,AI取代手机成主角,华为超越苹果称霸!
  17. 基础五:光的量子纠缠
  18. 初探MUI制作微信APP页面(一)
  19. 【国产】大数据自动化运维调度工具TASKCTL流程触发方式
  20. linux 网络硬盘 gen8,HP Gen8 + Epson L211 + Ubuntu 搭建内部服务器

热门文章

  1. Session or Cookie?是否有必要使用Tomcat等一下Web集装箱Session
  2. Linux下的Cacti网络管理系统---安装(二)
  3. py_文件操作_01
  4. java ajax 登陆验证,Spring Security4实例(Java config版)——ajax登录,自定义验证
  5. 【数据结构与算法】之深入解析“填充每个节点的下一个右侧节点指针”的求解思路与算法示例
  6. 【数据结构与算法】之深入解析“实现strStr()”的求解思路与算法示例
  7. Python之30秒就能学会的漂亮短程序代码
  8. LeetCode Algorithm 797. 所有可能的路径
  9. python人工智能——深度学习——TensorFlow——图和会话
  10. Netty实战 IM即时通讯系统(八)服务端和客户端通信协议编解码