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 爬虫爬取指定博客的所有文章
Feb 17 Python
numpy数组拼接简单示例
Dec 15 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
May 02 Python
解决Django的request.POST获取不到内容的问题
May 28 Python
Python中对数组集进行按行打乱shuffle的方法
Nov 08 Python
python实现计算器功能
Oct 31 Python
python分别打包出32位和64位应用程序
Feb 18 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
Feb 20 Python
python3.7调试的实例方法
Jul 21 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
Python Django项目和应用的创建详解
Nov 27 Python
Python matplotlib绘制雷达图
Apr 13 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 获取全局变量的代码
2011/04/21 PHP
精美漂亮的php分页类代码
2013/04/02 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
使用php验证复选框有效性的示例
2013/11/13 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python动态加载模块的3种方法
2014/11/22 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
Django的models模型的具体使用
2019/07/15 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
介绍一下EJB的体系结构
2012/08/01 面试题
实习单位推荐信范文
2013/11/27 职场文书
《桂林山水》教学反思
2014/02/08 职场文书
战略合作协议书范本
2014/04/18 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
2015年售票员工作总结
2015/04/29 职场文书
刑事起诉书范文
2015/05/19 职场文书
运动会报道稿大全
2015/07/23 职场文书
离婚协议书格式范本
2016/03/18 职场文书
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang