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快速排序代码实例
Nov 21 Python
python三元运算符实现方法
Dec 17 Python
Python按行读取文件的实现方法【小文件和大文件读取】
Sep 19 Python
对numpy 数组和矩阵的乘法的进一步理解
Apr 04 Python
python3.6数独问题的解决
Jan 21 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
Python使用xpath实现图片爬取
Sep 16 Python
如何使用Python调整图像大小
Sep 26 Python
Vs Code中8个好用的python 扩展插件
Oct 12 Python
python 实现表情识别
Nov 21 Python
python 实现定时任务的四种方式
Apr 01 Python
python基于tkinter制作m3u8视频下载工具
Apr 24 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函数,php爱好者站推荐
2007/03/19 PHP
PHP 读取和编写 XML
2014/11/19 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
比较搞笑的js陷阱题
2010/02/07 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
js Array.slice的8种不同用法示例
2019/07/10 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
基于hashlib模块--加密(详解)
2017/06/21 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
美国在线珠宝商店:SZUL
2017/02/11 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
AJax面试题
2014/11/25 面试题
陈安之励志演讲稿
2014/08/21 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
继承权公证书范本
2015/01/23 职场文书
十八大观后感
2015/06/12 职场文书
离职证明格式样本
2015/06/12 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
文艺委员竞选稿
2015/11/19 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python