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通过urllib2爬网页上种子下载示例
Feb 24 Python
python实现监控windows服务并自动启动服务示例
Apr 17 Python
Python使用函数默认值实现函数静态变量的方法
Aug 18 Python
Python常用知识点汇总
May 08 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 Python
python删除字符串中指定字符的方法
Aug 13 Python
Python3 使用selenium插件爬取苏宁商家联系电话
Dec 23 Python
python如何获取apk的packagename和activity
Jan 10 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
python使用ctypes库调用DLL动态链接库
Oct 22 Python
Python 键盘事件详解
Nov 11 Python
pycharm无法安装cv2模块问题
May 20 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
PHP clearstatcache()函数详解
2010/03/02 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
前后端如何实现登录token拦截校验详解
2018/09/03 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
python实现rest请求api示例
2014/04/22 Python
Python使用chardet判断字符编码
2015/05/09 Python
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
会计自我鉴定范文
2013/10/06 职场文书
研究生求职推荐信范文
2013/11/30 职场文书
建筑行业的大学生自我评价
2013/12/08 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
党员查摆问题及整改措施
2014/10/10 职场文书
公司放假通知怎么写
2015/04/15 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
2016新年晚会开场白
2015/12/03 职场文书
靠谱准确的求职信
2019/04/02 职场文书
Redis实战高并发之扣减库存项目
2022/04/14 Redis