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使用电子邮件模块smtplib的方法
Aug 28 Python
从头学Python之编写可执行的.py文件
Nov 28 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
Apr 27 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
May 18 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 11 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
redis 队列操作的例子(php)
2012/04/12 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
实例讲解JavaScript 计时事件
2020/07/04 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
王纯业的Python学习笔记 下载
2007/02/10 Python
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
Python复制文件操作实例详解
2015/11/10 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
python实现超级玛丽游戏
2020/03/18 Python
python操作链表的示例代码
2020/09/27 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
Noon埃及:埃及在线购物
2019/11/26 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
一封普通求职者的求职信
2013/11/20 职场文书
农村党支部先进事迹
2014/01/14 职场文书
元旦标语大全
2014/10/09 职场文书