19|自定义类型:面向对象编程的基础设施
海纳
你好,我是海纳。
在 Python 中,包括函数、方法、类型在内的一切皆是对象,我们前面已经很深刻地认识到了这一点。这些机制为面向对象编程提供了基础。上一节课,我们为虚拟机添加了类型系统。这节课,我们会在上节课的基础上,继续研究如何实现用户自定义类型。
自定义类的实现可能是 Python 3 相对于 Python 2 变化最大的一个特性了。它新增了很多机制,使类的功能变得更加强大、灵活了。但同时,这些新的特性也给开发者设置了不小的门槛,尤其是元类(metaclass),很多人即使可以合理地使用它来进行开发,但仍然很难说出它背后的原理。
这一节课,我们就一步步地来实现自定义类的这些功能。
支持用户自定义类型
Python 是一种支持对象的编程语言,而面向对象的编程语言中,最重要的一个特性就是自定义类。我们经过了长途跋涉,终于走到自定义类的门口了。和之前一样,我们先来研究测试用例以及它的字节码。
对应的字节码:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
1. Python 3 中新增了很多机制,使自定义类的功能变得更加强大、灵活,但也给开发者设置了不小的门槛,尤其是元类(metaclass)的使用。 2. Python 3 中的创建类型对象的核心逻辑位于 `__build_class__` 和 exec 两个函数中。 3. `__build_class__` 函数的作用是创建类型对象,它接受的参数有 5 个,包括 func、name、bases、metaclass 和 kwds。 4. 虚拟机通过执行 `__build_class__` 函数得到创建对象类型所需要的字典,然后通过调用 internal_exec 方法来创建类型对象。 5. 类的属性由第一个参数 func 来构造,func 所对应的 CodeObject 正是类型 A 的 CodeObject,在这段代码里,初始化了全量名、模块名、所有的方法和类属性。 6. Python 3 中的 exec 函数可以执行给定的源代码,并在全局和局部上下文中执行。 7. 虚拟机通过调用 Python 代码的时候,使用 call_virtual 方法进行跨语言调用。 8. 创建自定义类型的 TypeObject 对象是主要目标之一,通过 `__build_class__` 函数和 exec 方法实现了创建自定义类型的功能。 9. 通过 `__build_class__` 函数和 exec 方法,成功创建了一个自定义类型的类型对象,也就是它的对应的 TypeObject。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手写 Python 虚拟机》,新⼈⾸单¥59
《手写 Python 虚拟机》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论