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类方法与对象方法
Mar 15 Python
pycharm中连接mysql数据库的步骤详解
May 02 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
python实现分页效果
Oct 25 Python
python读取与写入csv格式文件的示例代码
Dec 16 Python
python函数修饰符@的使用方法解析
Sep 02 Python
python爬虫实现POST request payload形式的请求
Apr 30 Python
简单的命令查看安装的python版本号
Aug 28 Python
Python利用pip安装tar.gz格式的离线资源包
Sep 14 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 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
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
php中定义网站根目录的常用方法
2010/08/08 PHP
php输出表格的实现代码(修正版)
2010/12/29 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
详解AngularJS中的filter过滤器用法
2016/01/04 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
小程序自定义圆形进度条
2020/11/17 Javascript
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
Python中Continue语句的用法的举例详解
2015/05/14 Python
利用python修改json文件的value方法
2018/12/31 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
python 8种必备的gui库
2020/08/27 Python
美国知名生活购物网站:Goop
2017/11/03 全球购物
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
竞选学生会演讲稿
2014/04/25 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
2015年教师节新闻稿
2015/07/17 职场文书
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
webpack的移动端适配方案小结
2021/07/25 Javascript