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 参数列表中的self 显式不等于冗余
Dec 01 Python
Python中的并发编程实例
Jul 07 Python
python实现在每个独立进程中运行一个函数的方法
Apr 23 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
Python正则表达式教程之三:贪婪/非贪婪特性
Mar 02 Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 Python
详解Python中的动态属性和特性
Apr 07 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
pytorch多GPU并行运算的实现
Sep 27 Python
关于Python Tkinter Button控件command传参问题的解决方式
Mar 04 Python
Python matplotlib安装以及实现简单曲线的绘制
Apr 26 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
基于文本的搜索
2006/10/09 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
php实现每日签到功能
2018/11/29 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
Python标准库之collections包的使用教程
2017/04/27 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
python+requests接口自动化框架的实现
2020/08/31 Python
大专生自荐信
2013/10/04 职场文书
播音主持女孩的自我评价分享
2013/11/20 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
青年标兵事迹材料
2014/08/16 职场文书
研究生导师推荐信
2014/09/06 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
Python机器学习应用之工业蒸汽数据分析篇详解
2022/01/18 Python