【Python】深度理解Class类、Object类、Type元类;

news2024/11/26 4:29:51

详解Class类、Object类、Type元类

      • 1.Class类、Object类、Type元类的表面关系
      • 2.Class、Object、Type解释
        • 1.1关系详解
      • 2.Object类的默认方法作用详解
        • 2.2.1 init
        • 2.2.2 new
        • 2.2.3 repr
        • 2.2.4

提要:作为普通的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

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

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

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

在这里插入图片描述

2.2.1 init

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

2.2.2 new

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

2.2.3 repr

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

2.2.4

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/598739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP32设备驱动-MSA301加速计传感器驱动

MSA301加速计传感器驱动 文章目录 MSA301加速计传感器驱动1、MSA301介绍2、硬件准备3、软件准备4、驱动实现1、MSA301介绍 MSA301 是一款具有 I2C 数字输出的三轴低 g 加速度计,适用于消费类应用。 它具有 2g/4g/8g/16g 的动态用户可选满量程范围,并允许在 1Hz 至 500Hz 的…

Lombok 的正确使用姿势

文章目录 1.Lombok 是什么2.安装 Lombok3.Spring Boot 集成 Lombok4.使用 Lombok4.1 注解一览表4.2 部分使用介绍Getter(lazytrue)ValueBuilderSuperBuilderSneakyThrowsSlf4jCleanupNonNullWithSynchronizedval 在 Java 开发领域中,Lombok 插件已经成为一个非常流行…

OpenGL蓝宝书第八章学习笔记:基元处理之几何着色器

前言 本篇在讲什么 OpenGL蓝宝书第八章学习笔记之几何着色器 本篇适合什么 适合初学OpenGL的小白 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文教学 重实践&#xff0c…

使用scikit-learn和pandas学习线性回归

对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题 没有数据,当然没法研究机器学习啦。这里我们用…

buuctf re入门题目解析

目录 1.easyre 2.reverse1 3.reverse2 4.内涵的软件 1.easyre 将exe文件放入ida,在主函数main中找到flag,此题结束 2.reverse1 打开主函数main,发现有一个跳转函数,双击打开 这句命令是将str1和str2的内容比较,当…

「C/C++」C/C++空指针void*

✨博客主页:何曾参静谧的博客 📌文章专栏:「C/C」C/C程序设计 相关术语 void指针:是一种通用指针类型,可以指向任何类型的数据或对象。它不关心指向的数据或对象的类型,只关心指针本身的地址。因此&#xf…

性能测试—— 基础概念

目录 一、性能测试和功能测试的区别 二、性能测试衡量指标以及名称解释 1、并发用户数、系统用户数、在线用户数 2、响应时间、平均响应时间、请求响应时间 3、事务 4、点击率 5、吞吐量 6、思考时间 7、资源利用率 三、性能测试分类 1、一般性能测试 2、负载测试 …

【Python】函数 ③ ( 函数返回值定义语法 | 函数返回多个返回值 | 代码示例 )

文章目录 一、函数返回值定义语法二、函数返回多个返回值三、函数返回值代码示例 一、函数返回值定义语法 在 Python 函数中 , 通过 return 关键字 , 可以返回一个结果给调用者 , 这个返回结果就是 函数返回值 ; def 函数名(函数参数):"""函数文档字符串&#…

【C++】---模板初阶(超详练气篇)

个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

几种神经网络整定PID参数原理剖析及simulink案例仿真

目录 前言 1 基于单神经元自适应PID Simulink仿真分析 1.1 原理简介 1.1.1 无监督的Hebb学习 ​1.1.2 有监督的Delta学习 1.1.3 有监督的Hebb学习 1.1.4 改进的有监督Hebb学习 1.1.5 总结 1.2 simulink仿真分析 1.2.1 将权值作为状态变量仿真分析 1.2.2 利用局部变量…

Day6 不要二、把字符串转换成整数

✨个人主页: 北 海 🎉所属专栏: C/C相关题解 🎃操作环境: Visual Studio 2019 版本 16.11.17 文章目录 选择题1. 计算机组成原理 编程题1. 不要二2. 把字符串转换成为整数 选择题 1. 计算机组成原理 题目&#xff1a…

Atcoder beginner contest 303

A - Similar String AC代码&#xff1a; #include<iostream> #include<algorithm> #include<cstring> using namespace std; int main() {int n;cin >> n;string s, t;cin >> s >> t;bool flag true;for (int i 0; i < n; i) {if …

Nginx-Host绕过复现

目录 环境搭建&#xff1a; 第一种处理方式 第二种处理方式 第三种处理方式 原理依据&#xff1a;Nginx与PHP对Host处理方式不同 环境搭建&#xff1a; 1、提前安装完成nginxphpmysql&#xff0c;然后上传文件pwnhub到nginx/html下 2、修改nginx.conf配置文件&#xff1…

集权攻击系列:如何利用PAC新特性对抗黄金票据?

黄金票据简介 黄金票据是一种常见的域内权限维持手段&#xff0c;这种攻击主要是利用了Kerberos认证过程中TGT票据由KRBTGT用户的hash加密的特性&#xff0c;在掌握KRBTGT用户密码之后可以通过签发一张高权限用户的TGT票据&#xff0c;再利用这个TGT向KDC获取域内服务的ST来实…

ChatGPT 使用 拓展资料:2023年6月 吴恩达大咖Deeplearning.ai最新课程

ChatGPT 使用 拓展资料:2023年6月 吴恩达大咖Deeplearning.ai最新课程 Deeplearning.ai刚刚发布几个新的课程https://www.deeplearning.ai/short-courses/?utm_campaign=May%20Short%20Course%20Launch&utm_content=250952287&utm_medium=social&utm_source=link…

2023上半年软件设计师-试题详解与分析

目录 前言 上午题 计算机组成原理 信息安全 计算机相关法律 软件设计 语言处理 操作系统 软件工程 软件测试 面向对象编程 程序设计语言 数据库 数据结构与算法 计算机网络 计算机专业英语 下午题 数据流图 数据库 UML 算法与C语言 面向对象程序设计 前…

4 款原型设计软件助你成为优秀的产品经理

原型设计是产品经理必备的技能。对于产品经理来说&#xff0c;在原型设计的过程中&#xff0c;必然会使用各种原型设计软件。为了保证后续工作的稳定进行&#xff0c;必须满足初始原型设计图纸&#xff0c;而绘制原型设计图纸常用的原型设计软件很多&#xff0c;很多人不知道如…

文心一言 vs GPT4

本周真是科技爱好者的狂欢节。GPT4和文心一言接连发布&#xff0c;AI工具已经开始走进千家万户。 拿文心一言发布会上的几个问题调戏了 GPT4 一下&#xff0c;看看表现如何。 第一个为文心的回答&#xff0c;第二个为GPT4 的回答。 1. 可以总结一下三体的核心内容吗&#xf…

活动预告 | 2023 Meet TVM · 北京站定档,5 场 Talk 你最期待哪一场?

内容一览&#xff1a;2023 Meet TVM 线下聚会第二站定档 6 月 17 日&#xff01;这次我们设定了 5 个 Talk&#xff0c;期待和大家在北京中关村相聚&#xff01; 关键词&#xff1a;编译器 线下活动 2023MeetTVM 3 月 4 日&#xff0c; 2023 Meet TVM 首场线下活动在上海成功举…

awk实战案例

插入新字段 例&#xff1a;在“a b c d”中b的后面插入“e f g” echo "a b c d" | awk {$2$2" e f g";print} 格式化空白 移除每行的前缀、后缀空白&#xff0c;并将各部分左对齐 [rootlocalhost ~]# cat 1.txt aaaa bbb ccccc bbbb …