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二分法搜索算法实例分析
May 11 Python
Python中的并发处理之asyncio包使用的详解
Apr 03 Python
python实现随机漫步算法
Aug 27 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
Jul 04 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
pyinstaller打包找不到文件的问题解决
Apr 15 Python
Python list和str互转的实现示例
Nov 16 Python
python excel多行合并的方法
Dec 09 Python
python实现按日期归档文件
Jan 30 Python
详解如何用Python实现感知器算法
Jun 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
php flv视频时间获取函数
2010/06/29 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
Python遍历目录中的所有文件的方法
2016/07/08 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
航空大学应届生求职信
2013/11/10 职场文书
化妆品店促销方案
2014/02/24 职场文书
一年级评语大全
2014/04/23 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
认识实习感想
2015/08/10 职场文书
利用 JavaScript 构建命令行应用
2021/11/17 Javascript
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS