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 urllib模块urlopen()与urlretrieve()详解
Nov 01 Python
python 回调函数和回调方法的实现分析
Mar 23 Python
小米5s微信跳一跳小程序python源码
Jan 08 Python
python爬取微信公众号文章
Aug 31 Python
PyTorch基本数据类型(一)
May 22 Python
python3 enum模块的应用实例详解
Aug 12 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
利用matplotlib为图片上添加触发事件进行交互
Apr 23 Python
Python下载商品数据并连接数据库且保存数据
Mar 31 Python
Pyhton爬虫知识之正则表达式详解
Apr 01 Python
Python创建SQL数据库流程逐步讲解
Sep 23 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 加密解密内部算法
2010/04/22 PHP
PHPCMS的使用小结
2010/09/20 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
php中simplexml_load_file函数用法实例
2014/11/12 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
javascript void(0)的妙用
2009/10/21 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
vue使用一些外部插件及样式的配置代码
2019/11/18 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
python中字典dict常用操作方法实例总结
2015/04/04 Python
Python中subprocess的简单使用示例
2015/07/28 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
python实现微信自动回复功能
2018/04/11 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
python 两种方法删除空文件夹
2020/09/29 Python
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
苹果Mac升级:MacSales.com
2017/11/20 全球购物
创造美妙香氛体验:Aera扩散器和香水
2018/11/25 全球购物
社区优秀志愿者材料
2014/02/02 职场文书
小学新教师培训方案
2014/02/03 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
设计顾问服务计划书
2014/05/04 职场文书
父亲节感言
2015/08/03 职场文书
小学语文教师竞聘演讲稿范文
2019/08/09 职场文书
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python
SQL Server中锁的用法
2022/05/20 SQL Server
CSS的calc函数用法小结
2022/06/25 HTML / CSS