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单元测试unittest实例详解
May 11 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
使用TensorFlow实现二分类的方法示例
Feb 05 Python
Django 多环境配置详解
May 14 Python
python打开windows应用程序的实例
Jun 28 Python
python实现电子书翻页小程序
Jul 23 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
python分别打包出32位和64位应用程序
Feb 18 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
Dec 07 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
Dec 23 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 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
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
python中pygame模块用法实例
2014/10/09 Python
python实现RSA加密(解密)算法
2016/02/17 Python
pyenv命令管理多个Python版本
2017/03/26 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
Python3.6简单反射操作示例
2018/06/14 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
keras实现多种分类网络的方式
2020/06/11 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
Python图像读写方法对比
2020/11/16 Python
python自动化办公操作PPT的实现
2021/02/05 Python
英国儿童图书网站:Scholastic
2017/03/26 全球购物
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
施工材料员岗位职责
2014/02/12 职场文书
给市场的环保建议书
2014/05/14 职场文书
会计学专业自荐信
2014/06/25 职场文书
涨价通知
2015/04/23 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
学生会干部任命书
2015/09/21 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python