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编写的微博应用
Oct 17 Python
Python socket编程实例详解
May 27 Python
python使用clear方法清除字典内全部数据实例
Jul 11 Python
Python selenium抓取微博内容的示例代码
May 17 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
Python列表操作方法详解
Feb 09 Python
Python如何使用内置库matplotlib绘制折线图
Feb 24 Python
完美解决ARIMA模型中plot_acf画不出图的问题
Jun 04 Python
Anaconda配置各版本Pytorch的实现
Aug 07 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 Python
LeetCode189轮转数组python示例
Aug 05 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
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
php 安全过滤函数代码
2011/05/07 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
JavaScript 无符号右移运算符
2009/04/17 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
微信小程序 122100版本更新问题解决方案
2016/12/22 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
解决vue中修改了数据但视图无法更新的情况
2018/08/27 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
taro开发微信小程序的实践
2019/05/21 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
python的keyword模块用法实例分析
2015/06/30 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
python中if嵌套命令实例讲解
2021/02/25 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
印尼旅游网站:via
2017/11/12 全球购物
毕业典礼邀请函
2015/01/31 职场文书