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 获取 Linux 系统信息的代码
Jul 13 Python
Python类的继承和多态代码详解
Dec 27 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
对python:循环定义多个变量的实例详解
Jan 20 Python
python 读写excel文件操作示例【附源码下载】
Jun 19 Python
Python中的 sort 和 sorted的用法与区别
Aug 10 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
Aug 22 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
Python基于Socket实现简单聊天室
Feb 17 Python
Python读写压缩文件的方法
Jul 30 Python
Python安装使用Scrapy框架
Apr 12 Python
Python 一键获取电脑浏览器的账号密码
May 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
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
谈谈对offsetleft兼容性的理解
2015/11/11 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
Vue实现自带的过滤器实例
2017/03/09 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
基于Python代码编辑器的选用(详解)
2017/09/13 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
python读写csv文件的方法
2019/08/13 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
numpy实现RNN原理实现
2021/03/02 Python
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
校园之星获奖感言
2014/01/29 职场文书
兰兰过桥教学反思
2014/02/08 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
《诚实与信任》教学反思
2014/04/10 职场文书
学校食堂标语
2014/10/06 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
Java Spring读取和存储详细操作
2022/08/05 Java/Android