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中文分词实现方法(安装pymmseg)
Jun 14 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
pyqt5实现俄罗斯方块游戏
Jan 11 Python
Python turtle绘画象棋棋盘
Aug 21 Python
Python中list循环遍历删除数据的正确方法
Sep 02 Python
Python函数中的可变长参数详解
Sep 12 Python
Python numpy线性代数用法实例解析
Nov 15 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
python标准库OS模块详解
Mar 10 Python
Python celery原理及运行流程解析
Jun 13 Python
虚拟环境及venv和virtualenv的区别说明
Feb 05 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怎样调用MSSQL的存储过程
2006/10/09 PHP
php5 pdo新改动加载注意事项
2008/09/11 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
2013/04/24 PHP
php防止sql注入的方法详解
2017/02/20 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
jquery text,radio,checkbox,select操作实现代码
2009/07/09 Javascript
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
微信小程序开发之Tabbar实例详解
2017/01/09 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
在vue中使用G2图表的示例代码
2019/03/19 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
2019/09/10 Javascript
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
python判断完全平方数的方法
2018/11/13 Python
实现Python与STM32通信方式
2019/12/18 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
Python devel安装失败问题解决方案
2020/06/09 Python
python中time tzset()函数实例用法
2021/02/18 Python
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
元旦寄语大全
2014/04/10 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
大学毕业生个人总结
2015/02/28 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
期中考试后的感想
2015/08/07 职场文书
采购员工作总结范文
2015/08/12 职场文书