python底层源码_Python每天一分钟:解析python底层类的实现原理——竟然是type()

上一篇文章中,我们介绍了使用python的type()函数来动态创建用户类的详细过程,读者可以自行翻看:Python每天一分钟:类定义进阶/炫技—使用type函数动态创建类。

那么本文将进一步介绍python类的底层实现原理,同时完善对type()函数的详解,最后通过代码来验证原理!

03087bf40ad162d9313fc1212ac938e98b13cdd2.jpeg?token=560d3f39fae1689deea327718292f28e&s=B013707E06E09D4F14565C910200108Apython类的底层实现原理

一、python中的用户创建类都是type类的实例

在python的类编程中,所有由用户创建的类其实都是type类的实例对象!

该原理在上篇文章中有所提及,这里我们用代码来进一步说明:

ae51f3deb48f8c548a685afc003fbcf0e1fe7f41.jpeg?token=b1bd00f2a8768092cc31b1a053a77568&s=4FC2CC1213DA406146C101D8000050B2类与类对象的类型

上述代码中我们创建了用户类MyClass,并创建了其实例myinstance,然后使用type函数打印出了该类及其实例的类型。由打印结果可见:

类MyClass的类型为:其实例myinstance的类型为: ——原来如此二、用户创建类与type类的具体关系实现

python开发人员在创建自定义类时,python解释器事实上会去调用type类的__call__运算符:

type类的__call__运算符:type(classname, superclasses, attributedict)运算符的参数与示例如下图详解:

3b292df5e0fe9925dcdd31a40fbecfda8cb17108.jpeg?token=e65c26312602d2c788562c9debc88c04&s=09A67C3211C8FCEA046DD0CC0000A0B3type类的_call_运算符详解

用户在创建类时只是重载了type类的__call__运算符,而在调用__call__运算符时会进一步调用type类的两个方法:

#以下两个方法不在本文内容范围内,只做介绍不做验证#感兴趣的读者可以自行搜索python中的MetaClass元类的应用type.__new__(typeclass, classname, superclasses, attributedict)type.__init__(class, classname, superclasses, attributedict)

下面我们将通过代码来验证使用type创建的类与一般用户自定义的类是否一致。

三、代码验证

代码与运行结果如下:

d4628535e5dde711e56a3e3c9cf95f1e9c16615f.jpeg?token=3d09b8f5b46d60a865d39b0cd22728e7&s=EED2EC1291AEE14D0C7584DE000090B2验证代码

由上述打印结果可见,普通方式定义的MyClass类与使用type运算符__call__创建的MyClass类的结果是完全一致的,这就验证了python类的底层实现原理

总结

本文内容只是原理介绍,目的是帮助读者进一步掌握python中类的基础知识与技能!虽然实际开发中应用不多,但作为基础知识牢牢掌握总是没错的!

希望本文有助于您的学习,工作!最后感谢您的阅读!

b21c8701a18b87d62ce4a1113d1eb93d1f30fd31.jpeg?token=55c88a0f8cef1fa0f8ad5fd3640653f2&s=EDAE757E9F706E800C50D4C60000A070谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值