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

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

python坤坤代码源 python底层源码_python

python类的底层实现原理

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

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

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

python坤坤代码源 python底层源码_运算符_02

类与类对象的类型

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

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

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

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

python坤坤代码源 python底层源码_python坤坤代码源_03

type类的_call_运算符详解

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

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

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

三、代码验证

代码与运行结果如下:

python坤坤代码源 python底层源码_python_04

验证代码

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

总结

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