深度理解Python中Class类、Object类、Type元类

 更新时间:2023年06月02日 15:02:35   作者:会振刀的程序员  
本文主要介绍了深度理解Python中Class类、Object类、Type元类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

提要:作为普通的Python开发者来讲,深入理解object、type不是必要的,但了解他们确实

元编程这个词很多朋友都听过,可能用的却不多。其实它的使用主要使用场景还是在组件研发和框架研发。但是我还是推荐大家务必对元编程有一个基础的认识和了解,我相信它一定可以将的编码和理解能力拔高一层。我将深入浅出的引出一些元编程所需的基础知识来帮助大家入门。

1.Class类、Object类、Type元类的表面关系

  • object:object类是所有类(class)的父类,包括type类,object类的父类为空
  • type:type类是所有类的类型,即为所有类(class)都可由type实例化而来,包括type类和父类object。
  • class:继承自object,同时,由type进行实例化。其中,type就是我们所讲的元类(metaclass)
print('type的父类是:',type.__base__)
class test:
    pass
print('class的父类是:',test.__base__)
print('object的父类是:',object.__base__)

2.Class、Object、Type解释

class:是典型的面对对象编程的表现形式,为定义对象的属性、行为提供了一个模板。其实说白了就是用来写业务的

  • object:Python2中,创建类需要显示声明object方法才会继承,若不声明,则不继承。这里我们不再过多讨论Python2。在Python3中,已经隐式的自动继承了object方法,所以我们平时编写的class默认类方法其实是由object方法提供的,Python3中任何一个类都默认集成了Object,不可改变。我们通过下图看看object类到底有多少内置函数,分别是谁?并将解析他们中主要成员。

1.1关系详解

object、type:本文的核心之一就是阐述object与type的关系。
1、上述有一个比较绕的逻辑是object类是type的父类,而object类是type实例化而来,我想了很久怎么去解释和阐述这个逻辑,发现其实从Python的层面来讲已经解释不清了,于是翻到了C的源码,又查了很多资料,翻了很多博客。这里我想结合所有所得总结一些信息:不用去深究object和type的深度关系是什么,除非你想去看完C的PyObject部分,我相信对绝大多数人来讲结果一定是戛然而止的。那么我们只需要知道type的父类是object,object的类型是type便好。

2、那么如何看待object、type在Python面对对象概念中的一席之地呢?这里引用这位博主的一句话。
可以把二者理解为是两个体系的王者,object是站在继承关系顶点的存在,所有的类最后都是继承自object的,object没有父类了,所以这里输出为空(),object是type类型的,也就是说type是站在类型关系顶端的存在,所有的类型都难逃type类型的掌握,所以object和type自己的类型都是type,type的父类是object

3.Object类的默认方法作用详解

前言提要:默认类方法是从何而来呢!Python2中,创建类需要显示声明Object方法才会继承,若不声明,则不继承;Python3中,已经隐式的自动继承了Object方法。所以我们平时编写的class默认类方法其实是有object方法提供的,Python3中任何一个类都默认集成了Object,不可改变。我们通过下图看看object类到底有多少内置函数,分别是谁?并将解析他们中主要成员。

print(list(object.__dict__.keys()))

3.1 init

详解:构造方法,这是从其他语言借鉴过来的术语。作用:当类实例被创造后调用的方法,所以更严格来讲应叫做 初始化方法,而不是构造方法。但通常很多同学会把它叫做构造方法,其实是不对的,因为Python中的构造方法另有其人,它就是new方法。

3.2 new

详解:用于构建实例的特殊方法。关于这个方法咱不用再进一步深究,除非你想去看看CPython源码。它返回一个实例,这个实例会作为第一个参数(即self)传给init方法,所以init方法的第一个self参数其实是这样得到的,而new便是真正构造类实例的方法。通常我们几乎不需要自己编写new方法,因为从object类集成的实现已经足够了。

3.3 repr

详解:__repr__()会返回和调用者有关的“类名+object at+内存地址”。所以我们在执行类的实例化之后返回了一个实例实际上就是调用了repr函数。当然它从道理上来讲也可以重写,但是建议最好不要动它,因为确实没有什么重写的必要。还是那句话,所有的动作皆为业务而生,反之就不要产生动作。

3.4

  • isinstance
  • issubclass
  • 论述 继承与类型 的关系
  • type.new方法创建实例

到此这篇关于深度理解Python中Class类、Object类、Type元类的文章就介绍到这了,更多相关Python Class类 Object类 Type元类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现PDF转Word的多种方式总结

    Python实现PDF转Word的多种方式总结

    这篇文章主要为大家详细介绍了三种Python实现PDF文件转Word文档的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • Python下载网络小说实例代码

    Python下载网络小说实例代码

    这篇文章主要介绍了Python下载网络小说实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Python中Dict两种实现的原理详解

    Python中Dict两种实现的原理详解

    在Python中, Dict是一系列由键和值配对组成的元素的集合, 它是一个可变容器模型,可以存储任意类型对象。本文主要介绍了Dict两种实现的原理,感兴趣的可以了解一下
    2023-03-03
  • pandas.DataFrame写入数据库的实现方式

    pandas.DataFrame写入数据库的实现方式

    这篇文章主要介绍了pandas.DataFrame写入数据库的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python开发自定义Web框架的示例详解

    Python开发自定义Web框架的示例详解

    这篇文章主要为大家详细介绍了python如何开发自定义的web框架,我文中示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • python使用PyGame实现打砖块游戏

    python使用PyGame实现打砖块游戏

    打砖块也是一个非常经典的小游戏,玩法大致如下,用一个小车接一个小球,然后反射小球,使之打在砖块上,当小球碰到砖块之后,则砖块被消掉,逻辑十分清晰,本文将给大家介绍了python使用PyGame实现打砖块游戏,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2023-12-12
  • 浅析Python WSGI的使用

    浅析Python WSGI的使用

    WSGI也称之为web服务器通用网关接口,全称是web server gateway interface。这篇文章主要为大家介绍了Python WSGI的使用,希望对大家有所帮助
    2023-04-04
  • python实现简单的tcp 文件下载

    python实现简单的tcp 文件下载

    这篇文章主要介绍了python如何实现简单的tcp文件下载,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09
  • 使用python模拟命令行终端的示例

    使用python模拟命令行终端的示例

    今天小编就为大家分享一篇使用python模拟命令行终端的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 使用Python实现 学生学籍管理系统

    使用Python实现 学生学籍管理系统

    这篇文章主要介绍了使用Python实现 学生学籍管理系统,代码大致分为五个函数组成,具体内容详情本文给大家介绍的非常详细,需要的朋友可以参考下
    2019-11-11

最新评论