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处理字符串之isspace()方法的使用
May 19 Python
在Python中使用next()方法操作文件的教程
May 24 Python
python Pandas 读取txt表格的实例
Apr 29 Python
Python 实现字符串中指定位置插入一个字符
May 02 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
Python列表元素常见操作简单示例
Oct 25 Python
基于Python绘制个人足迹地图
Jun 01 Python
Python常用模块函数代码汇总解析
Aug 31 Python
python+selenium自动化实战携带cookies模拟登陆微博
Jan 19 Python
python中time.ctime()实例用法
Feb 03 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
深入PHP5中的魔术方法详解
2013/06/17 PHP
jquery 锁定弹出层实现代码
2010/02/23 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
jquery分页插件jpaginate在IE中不兼容问题
2014/04/22 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
VUE搭建手机商城心得和遇到的坑
2019/02/21 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
JavaScript实现下拉列表
2021/01/20 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现根据图标提取分类应用程序实例
2014/09/28 Python
详解python3百度指数抓取实例
2016/12/12 Python
python实现中文文本分句的例子
2019/07/15 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
化工专业应届生求职信
2013/11/08 职场文书
平面设计求职信
2014/03/10 职场文书
学习考察心得体会
2014/09/04 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
武当山导游词
2015/02/03 职场文书
军训结束新闻稿
2015/07/17 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书