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入门教程
Feb 08 Python
基于wxpython开发的简单gui计算器实例
May 30 Python
python对DICOM图像的读取方法详解
Jul 17 Python
Scrapy爬虫实例讲解_校花网
Oct 23 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
Apr 02 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
PyCharm设置每行最大长度限制的方法
Jan 16 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
Django组件cookie与session的具体使用
Jun 05 Python
python3图片文件批量重命名处理
Oct 31 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
python使用建议与技巧分享(二)
Aug 17 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中养成7个面向对象的好习惯
2010/01/28 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
python 列表推导式使用详解
2019/08/29 Python
使用Python的turtle模块画国旗
2019/09/24 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
品质主管的岗位职责
2013/12/04 职场文书
军训自我鉴定200字
2014/02/13 职场文书
食品业务员岗位职责
2014/03/18 职场文书
倡议书格式模板
2014/05/13 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
先进班集体事迹材料
2014/12/25 职场文书
项目经理岗位职责
2015/01/31 职场文书
统计员岗位职责
2015/02/11 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书
vue 实现上传组件
2021/05/31 Vue.js
python实现学生信息管理系统(面向对象)
2022/06/05 Python