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程序的执行原理
Apr 11 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
Feb 25 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
python验证码图片处理(二值化)
Nov 01 Python
python+selenium+PhantomJS抓取网页动态加载内容
Feb 25 Python
python 获取当前目录下的文件目录和文件名实例代码详解
Mar 10 Python
Python爬虫爬取、解析数据操作示例
Mar 27 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
Apr 17 Python
Django路由层URLconf作用及原理解析
Sep 24 Python
Django多个app urls配置代码实例
Nov 26 Python
plt.figure()参数使用详解及运行演示
Jan 08 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 file_get_contents设置超时处理方法
2013/09/30 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
7个JS基础知识总结
2014/03/05 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
JS动态图片的实现方法完整示例
2020/01/13 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
Python解析json文件相关知识学习
2016/03/01 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
python书籍信息爬虫实例
2018/03/19 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
Django中使用第三方登录的示例代码
2018/08/20 Python
python匿名函数的使用方法解析
2019/10/10 Python
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
什么是接口(Interface)?
2013/02/01 面试题
中学生团员自我评价分享
2013/12/07 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
职位证明模板
2015/06/23 职场文书
运动会广播稿100字
2015/08/19 职场文书