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常用正则表达式符号浅析
Aug 13 Python
一些Python中的二维数组的操作方法
May 02 Python
Python实现队列的方法
May 26 Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
python实现自动解数独小程序
Jan 21 Python
浅析Python 引号、注释、字符串
Jul 25 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
python matplotlib包图像配色方案分享
Mar 14 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
Oct 12 Python
使用Python开发贪吃蛇游戏 SnakeGame
Apr 30 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使用正则过滤js脚本代码实例
2014/05/10 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
[52:26]完美世界DOTA2联赛决赛 FTD vs Phoenix 第一场 11.08
2020/11/11 DOTA
Python实现OpenCV的安装与使用示例
2018/03/30 Python
带你认识Django
2019/01/15 Python
Python实现SQL注入检测插件实例代码
2019/02/02 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
python:按行读入,排序然后输出的方法
2019/07/20 Python
基于python中__add__函数的用法
2019/11/25 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
巴西手表购物网站:eclock
2019/03/19 全球购物
Java程序员面试题
2016/09/27 面试题
技术经理的自我评价范文
2013/12/03 职场文书
门卫班长岗位职责
2013/12/15 职场文书
户籍证明的格式
2014/01/13 职场文书
小学三八妇女节活动方案
2014/03/16 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
自我检讨报告
2015/01/28 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js
利用Python脚本写端口扫描器socket,python-nmap
2022/07/23 Python