上一篇文章中,我们介绍了使用python的type()函数来动态创建用户类的详细过程,读者可以自行翻看:Python每天一分钟:类定义进阶/炫技—使用type函数动态创建类。
那么本文将进一步介绍python类的底层实现原理,同时完善对type()函数的详解,最后通过代码来验证原理!
python类的底层实现原理
一、python中的用户创建类都是type类的实例
在python的类编程中,所有由用户创建的类其实都是type类的实例对象!
该原理在上篇文章中有所提及,这里我们用代码来进一步说明:
类与类对象的类型
上述代码中我们创建了用户类MyClass,并创建了其实例myinstance,然后使用type函数打印出了该类及其实例的类型。由打印结果可见:
类MyClass的类型为:其实例myinstance的类型为: ——原来如此二、用户创建类与type类的具体关系实现
python开发人员在创建自定义类时,python解释器事实上会去调用type类的__call__运算符:
type类的__call__运算符:type(classname, superclasses, attributedict)运算符的参数与示例如下图详解:
type类的_call_运算符详解
用户在创建类时只是重载了type类的__call__运算符,而在调用__call__运算符时会进一步调用type类的两个方法:
#以下两个方法不在本文内容范围内,只做介绍不做验证#感兴趣的读者可以自行搜索python中的MetaClass元类的应用type.__new__(typeclass, classname, superclasses, attributedict)type.__init__(class, classname, superclasses, attributedict)
下面我们将通过代码来验证使用type创建的类与一般用户自定义的类是否一致。
三、代码验证
代码与运行结果如下:
验证代码
由上述打印结果可见,普通方式定义的MyClass类与使用type运算符__call__创建的MyClass类的结果是完全一致的,这就验证了python类的底层实现原理
总结
本文内容只是原理介绍,目的是帮助读者进一步掌握python中类的基础知识与技能!虽然实际开发中应用不多,但作为基础知识牢牢掌握总是没错的!