深入类和对象

自作多情 提交于 2019-12-28 15:08:51

序言

前面的文章已经和大家一起学完了Python的基础知识,从本章文章之后会继续和大家一起学习Python高级编程技巧,感谢大家的支持!

鸭子类型与多态

多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚"鸭子类型"

**动态语言调用实例方法时不检查类型,只要方法存在,参数正确,就可以调用。**这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。

所谓多态定义时的类型和运行时的类型不一样此时就成为多态
在这里插入图片描述

抽象基类(abc模块)
抽象基类(abstract base class,ABC):抽象基类就是类里定义了纯虚成员函数的类。纯虚函数只提供了接口,并没有具体实现。抽象基类不能被实例化(不能创建对象),通常是作为基类供子类继承,子类中重写虚函数,实现具体的接口。

抽象基类就是定义各种方法而不做具体实现的类,任何继承自抽象基类的类必须实现这些方法,否则无法实例化。
应用场景
1.判断某个对象的类型;
2.我们需要强制某个子类必须实现某些方法。
在这里插入图片描述

isinstance与type的区别

如果我们需要查看某个变量的类型时,一般第一时间都会想到使用type()函数,比如name=“smith”,print(type(name)),可以很容易知道name是一个str型。其实Python中还有函数isinstance()也可以查看,使用方法isinstance(object,type)就是查看一个对象是否是什么类型,如果是返回值为True,如果不是返回值是False。如:print(isinstance(1,int))结果就是True。但是在类中呢,我们分别看下这两个之间的区别:
在这里插入图片描述
所以,isinstance()考虑类的继承,type()不考虑类的继承,这就是这两个函数之间的区别!

类变量与对象变量

我们知道在类中定义变量叫类变量,也叫类属性,可以同时被类与实例访问(参考前面文章“封装”),在类中定义的函数叫实例方法,函数中的变量也叫对象变量或者实例属性,实例属性只能被实例访问,不能被类访问。
在这里插入图片描述

Python对象的自省机制

自省是通过一定的机制查询到对象的内部结构

Python中比较常见的自省(introspection)机制(函数用法)有: dir(),type(), hasattr(), isinstance(),通过这些函数,我们能够在程序运行时得知对象的类型,判断对象是否存在某个属性,访问对象的属性。

super函数

在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可通过使用 super 来实现。
在这里插入图片描述
文章内容总结:
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!