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中使用lambda高效操作列表的教程
Apr 24 Python
python使用arp欺骗伪造网关的方法
Apr 24 Python
python django事务transaction源码分析详解
Mar 17 Python
python 列表中[ ]中冒号‘:’的作用
Apr 30 Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 Python
python 实现生成均匀分布的点
Dec 05 Python
python 视频逐帧保存为图片的完整实例
Dec 10 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
Python matplotlib实时画图案例
Apr 23 Python
Python学习笔记之装饰器
Aug 06 Python
Python基于pillow库实现生成图片水印
Sep 14 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
PHP 错误之引号中使用变量
2009/05/04 PHP
php笔记之常用文件操作
2010/10/12 PHP
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
php实现购物车功能(下)
2016/01/05 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
JavaScript国旗变换效果代码
2008/08/13 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
JS实现身份证输入框的输入效果
2017/08/21 Javascript
vue项目中的webpack-dev-sever配置方法
2017/12/14 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
如何用python整理附件
2018/05/13 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
static函数与普通函数有什么区别
2015/12/25 面试题
门诊挂号室室长岗位职责
2013/11/27 职场文书
迎新晚会邀请函
2014/02/01 职场文书
消防安全标语
2014/06/07 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB
MySQL中一条update语句是如何执行的
2022/03/16 MySQL