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 相关文章推荐
python3使用urllib模块制作网络爬虫
Apr 08 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
Python 中@property的用法详解
Jan 15 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
Django3中的自定义用户模型实例详解
Aug 23 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
用Python自动清理系统垃圾的实现
Jan 18 Python
pyx文件 生成pyd 文件用于 cython调用的实现
Mar 04 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
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
关于js datetime的那点事
2011/11/15 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
2020/10/30 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
[00:10]神之谴戒
2019/03/06 DOTA
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
2016/05/17 Python
对于Python中RawString的理解介绍
2016/07/07 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
python按照多个条件排序的方法
2019/02/08 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
Python创建数字列表的示例
2019/11/28 Python
python剪切视频与合并视频的实现
2020/03/03 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
写好求职信第一句话的技巧
2013/10/26 职场文书
经典演讲稿范文
2013/12/30 职场文书
行政管理毕业生自荐信
2014/02/24 职场文书
无保留意见审计报告
2015/06/05 职场文书
Python os和os.path模块详情
2022/04/02 Python