Python类继承和多态原理解析


Posted in Python onFebruary 05, 2020

这篇文章主要介绍了python类继承和多态原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

现在属于是老年人的脑子,东西写着写着就忘了,东西记着记着就不知道了。之前学C++的时候就把类、对象这块弄得乱七八糟,现在是因为很想玩python,所以就看看python的类和对象。

就像说的,类有三个特征:封装、继承、多态。

1、封装:类封装了一些方法,可通过一定的规则约定方法进行访问权限。

C++中的成员变量有public、private、ptotected。

在python中,默认的成员变量都是public的,如果成员变量前面是加两个下划线,表示该成员变量是私有的。并且private类不能被继承类引用,并且不允许直接访问。

2、继承:在定义一个类的时候可以从当前有的类中进行继承。

python是允许多继承的,并且在子类中拥有父类所有的成员变量和方法,为了缓解代码中的冗余,子类在父类的基础上增加的成员变量可以如下修改。

class Person(object):
  def __init__(self,name,sex):
    self.name = name
    self.sex = sex

class Child(Person):             # Child 继承 Person
  def __init__(self,name,sex,mother,father):
    Person.__init__(self,name,sex)    # 子类对父类的构造方法的调用
    self.mother = mother
    self.father = father

May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)

3、多态:当子类继承父类之后,成员方法既可以重写也可以不重写。当调用的时候只要保证新方法编写正确,不用管原来的代码。

对扩展开放(Open for extension):允许子类重写方法函数
对修改封闭(Closed for modification):不重写,直接继承父类方法函数
python是一种动态语言,动态语言是在运行的时候确定数据类型的语言。变量在使用前不用声明,通常变量的类型是被复制的那个值的类型。

静态语言是在编译的时候变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前鼻血声明数据类型。

在类中,当要对成员变量进行约束的时候可以使用@property,python内置的@property装饰器是负责把一个方法变成属性调用

在实例属性操作的时候,就知道该属性很可能不是直接暴露的,而是通过getter和setter方法来实现的。还可以定义只读属性,只定义getter方法不定义setter就是一个只读属性

请利用@property给一个Screen对象加上width和height属性,以及一个只读属性resolution:

class Screen(object) :
  @property
  def width(self) :
    return self._width

  @width.setter
  def width(self,valuer) :
    if not isinstance(valuer,int):
      raise ValueError('score must be an integer')
    if valuer < 0 :
      raise ValueError('score must over zero')  
    self._width=valuer

  @property
  def height(self) :
    return self._height

  @height.setter
  def height(self,number) :
    if not isinstance(number,int) :
      raise ValueError('score must be an integer')
    if number < 0 :
      raise ValueError('score must be an zero')
    self._height = number

  @property
  def resolution(self):
    return self._width * self._height
s=Screen()
s.width = 1024
s.height = 768
print(s.resolution)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现人人网登录示例分享
Jan 19 Python
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
Apr 12 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
Python wxPython库Core组件BoxSizer用法示例
Sep 03 Python
Python寻找两个有序数组的中位数实例详解
Dec 05 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 Python
python中多个装饰器的调用顺序详解
Jul 16 Python
python网络编程之多线程同时接受和发送
Sep 03 Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 Python
python四种出行路线规划的实现
Jun 23 Python
Python模块 _winreg操作注册表
Feb 05 #Python
python3操作注册表的方法(Url protocol)
Feb 05 #Python
Python tkinter模版代码实例
Feb 05 #Python
Python Scrapy框架第一个入门程序示例
Feb 05 #Python
python lambda函数及三个常用的高阶函数
Feb 05 #Python
Python 3.8 新功能大揭秘【新手必学】
Feb 05 #Python
TensorFlow学习之分布式的TensorFlow运行环境
Feb 05 #Python
You might like
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
php5.4传引用时报错问题分析
2016/01/22 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
JSON格式化输出
2014/11/10 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
Django框架模板的使用方法示例
2019/05/25 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
考试没考好检讨书
2014/01/31 职场文书
受伤赔偿协议书
2014/09/24 职场文书
导游带团欢迎词
2015/09/30 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书