python中的类和对象的定义和使用(Python类的继承、多态及获取对象信息操作详解)
python中的类和对象的定义和使用
Python类的继承、多态及获取对象信息操作详解本文实例讲述了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程序设计有所帮助。
原文链接:https://blog.csdn.net/dcrmg/article/details/75093278
- python中对象方法和顶级方法(Python3.5面向对象程序设计之类的继承和多态详解)
- vue插槽的分类(vue具名插槽的基本使用实例)
- C#中抽象类和接口的区别有哪些
- mysql用什么类型数据(MySQL 数据类型选择原则)
- UML类图概念讲解(一)
- php框架制作方法(PHP从零开始打造自己的MVC框架之路由类实现方法分析)
- python中if判断数据类型(基于python if 判断选择结构的实例详解)
- dede头部文件在哪(dede专题节点文章按id,点击等类型排序)
- php运行实例(php实例化一个类的具体方法)
- dedecms v5.7使用教程(织梦dedecms数据库类$dsql使用方法步骤)
- dedecms标签分类(dedecms list增加noflag属性的方法 实现让列表标签不调用有推荐属性的文章)
- ASP.NET匿名类型var
- contenttype类型
- ASP.NET自定义分页类
- 开发者微信公众号开发流程(微信公众平台开发教程⑥ 微信开发集成类的使用图文详解)
- dedecms搜索功能怎么设置详细(DEDECMS自定义联动类别调用及修改方法)
- 读卖乐园的彩灯(读卖乐园的彩灯)
- 新疆80后在淘宝卖干果 以前是 不务正业 如今帮乡亲致富(新疆80后在淘宝卖干果)
- 弄清楚了销 售 买 卖这四个字,母婴生意做起来就没那么难了(弄清楚了销售买)
- 数读 买首饰金是 投资黄金 吗 买金容易卖金难(数读买首饰金是)
- 销 售 买 卖 你真的了解这四个字了吗(销售买)
- 谢娜是得罪快乐大本营造型师了吗 全场被黑化(谢娜是得罪快乐大本营造型师了吗)
热门推荐
- mysql8.0.15安装详细教程(mysql8.0.11数据目录迁移的实现)
- pythonai识别算法(Python3调用百度AI识别图片中的文字功能示例测试可用)
- python处理excel基础教程第3讲(Python Excel处理库openpyxl使用详解)
- vue element 权限管理(Vue Element前端应用开发之功能点管理及权限控制)
- 云服务器ecs更换可用区(在阿里云管理控制台重置ECS实例的密码并重启服务器后无法访问该服务器)
- 详解从vue的组件传值着手观察者模式(详解从vue的组件传值着手观察者模式)
- php服务器有哪些(php服务器的系统详解)
- docker搭建私有dns域名解析(docker内网搭建dns使用域名访问替代ip:port的操作)
- python 微信二维码接口(python实现微信防撤回神器)
- iis安全包括哪些方面(使用华盾IIS备份还原工具备份还原IIS站点图解)