Python类的继承、多态及获取对象信息操作详解


Posted in Python onFebruary 28, 2019

本文实例讲述了Python类的继承、多态及获取对象信息操作。分享给大家供大家参考,具体如下:

继承

类的继承机制使得子类可以继承父类中定义的方法,拥有父类的财产,比如有一个Animal的类作为父类,它有一个eat方法:

class Animal(object):
  def __init__(self):
    print("Animal 构造函数调用!")
  def eat(self):
    print("Animal is eatting!")

写两个子类,Cat和Dog类,继承自Animal类,声明方法是在定义子类的时候在子类的括号内写上父类Animal:

class Animal(object):
  def __init__(self):
    print("Animal 构造函数调用!")
  def eat(self):
    print("Animal is eatting!")
class Cat(Animal):
  def __init__(self):
    print("Cat 构造函数调用!")
class Dog(Animal):
  def __init__(self,age):
    self.age=age
    print("Dog 构造函数调用!")

两个子类中并没有声明任何方法,但是会自动继承父类中的eat方法:

cat=Cat()
dog=Dog(3)
cat.eat()
dog.eat()

声明两个对象,调用eat方法,运行输出:

Cat 构造函数调用!
Dog 构造函数调用!
Animal is eatting!
Animal is eatting!

一般把一些共有的方法定义在基类中,其他继承自该基类的子类就可以自动拥有这个方法。

多态

在继承的基础上,就引入了类的另外一个重要的特性——多态。

考虑一个问题,子类可以继承父类的方法,那子类是否可以实现自己的这个方法呢,答案是可以的。

class Animal(object):
  def __init__(self):
    print("Animal 构造函数调用!")
  def eat(self):
    print("Animal is eatting!")
class Cat(Animal):
  def __init__(self):
    print("Cat 构造函数调用!")
  def eat(self):
    print("Cat is eatting!")
class Dog(Animal):
  def __init__(self,age):
    self.age=age
    print("Dog 构造函数调用!")
  def eat(self):
    print("年龄是"+str(self.age)+"岁的Dog is eatting!")
cat =Cat()
cat.eat()
dog=Dog(3)
dog.eat()

子类如果也定义了自己的实现,就会优先调用自己的实现,上边cat和dog调用eat方法就分别是自己的实现,运行输出:

Cat 构造函数调用!
Cat is eatting!
Dog 构造函数调用!
年龄是3岁的Dog is eatting!

多态意味着一个接口,多种实现,另一个可以体现类的多态这种特性的例子:

def eat(animal):
  if hasattr(animal,'eat'):
    animal.eat()
  if hasattr(animal,'age'):
    a=getattr(animal,'age')
    print('animal的年龄是'+str(a)+'岁')
eat(dog)

这里定义了一个普通函数eat,函数的入参是类的对象,具体实现是调用传入的对象的eat方法,传入不同的对象,就有不同的输出,调用的时候只要调用这个接口就可以了,而不用管具体的细节。

运行输出:

年龄是3岁的Dog is eatting!
animal的年龄是3岁

获取对象信息

hasattr(object , 'name')

说明:判断对象object是否包含名为name的属性或方法,如果有则返回True,没有则返回False

getattr( object, 'name')

说明:获取对象object中名称为name的属性,返回name的值。

对类中方法的调用,可以先用hasattr判断是否存在该方法,然后再调用这个方法,避免异常:

class Animal(object):
  def __init__(self):
    print("Animal 构造函数调用!")
  def eat(self):
    print("Animal is eatting!")
def eat(animal):
  if hasattr(animal,'eat'):
    animal.eat()
  if hasattr(animal,'age'):
    a=getattr(animal,'age')
    print('animal的年龄是'+str(a)+'岁')
  if hasattr(animal, 'sleep'):
    animal.sleep()
  else:
    print('animal类中不含有sleep方法!')
animal=Animal()
eat(animal)

运行输出:

Animal 构造函数调用!
Animal is eatting!
animal类中不含有sleep方法!

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 Python
python实现mysql的单引号字符串过滤方法
Nov 14 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
详解python解压压缩包的五种方法
Jul 05 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
python通过txt文件批量安装依赖包的实现步骤
Aug 13 Python
PyQT5 emit 和 connect的用法详解
Dec 13 Python
如何基于python实现脚本加密
Dec 28 Python
Pytorch之保存读取模型实例
Dec 30 Python
Tensorflow读取并输出已保存模型的权重数值方式
Jan 04 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
浅谈Django前端后端值传递问题
Jul 15 Python
django模板结构优化的方法
Feb 28 #Python
详解python做UI界面的方法
Feb 27 #Python
总结python中pass的作用
Feb 27 #Python
Python递归函数实例讲解
Feb 27 #Python
PyQt打开保存对话框的方法和使用详解
Feb 27 #Python
python中嵌套函数的实操步骤
Feb 27 #Python
python把1变成01的步骤总结
Feb 27 #Python
You might like
解析thinkphp中的导入文件标签
2013/06/20 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
php 常用的系统函数
2017/02/07 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
前端如何实现动画过渡效果
2021/02/05 Javascript
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
详细解读Python中解析XML数据的方法
2015/10/15 Python
python通过文件头判断文件类型
2015/10/30 Python
Python 判断奇数偶数的方法
2018/12/20 Python
python读取各种文件数据方法解析
2018/12/29 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
好习惯伴我成长演讲稿
2014/05/21 职场文书
预备党员综合考察材料
2014/05/31 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书
师德师风学习材料
2014/12/19 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
2015年暑假工作总结
2015/07/13 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python