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中的getattr函数 hasattr函数
Jun 14 Python
用Python设计一个经典小游戏
May 15 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
Jan 27 Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
python实现windows壁纸定期更换功能
Jan 21 Python
python 阶乘累加和的实例
Feb 01 Python
python-itchat 获取微信群用户信息的实例
Feb 21 Python
Django如何实现上传图片功能
Aug 16 Python
django ORM之values和annotate使用详解
May 19 Python
python“静态”变量、实例变量与本地变量的声明示例
Nov 13 Python
Python Pandas解析读写 CSV 文件
Apr 11 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
收集的DedeCMS一些使用经验
2007/03/17 PHP
组合算法的PHP解答方法
2012/02/04 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
jquery中的查找parents与closest方法之间的区别
2013/12/02 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
用实例分析Python中method的参数传递过程
2015/04/02 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
Python算法应用实战之队列详解
2017/02/04 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
Python数据操作方法封装类实例
2017/06/23 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
Python装饰器使用你可能不知道的几种姿势
2019/10/25 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
体育学院毕业生自荐信
2013/11/03 职场文书
立志成才演讲稿
2014/09/04 职场文书
2015年库房管理工作总结
2015/10/14 职场文书
Python使用MapReduce进行简单的销售统计
2022/04/22 Python