| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python子类实例化的时候父类的__new__会被调用吗? -> 正文阅读 |
|
[Python知识库]python子类实例化的时候父类的__new__会被调用吗? |
测试代码:
测试结果: testB 这说明子类实例化的时候,会调用父类的__new__方法,但是不会调用祖先的__new__方法。
测试结果: testA 这说明,如果父类么有实现__new__方法,那么就会继续沿着继承链往上寻找祖先的__new__方法,一旦找到就立即调用,然后停止寻找。 假设子类实现了__new__方法,那么父类的__new__方法还会被调用吗?
测试结果: testC 这说明子类实现了__new__方法,那么父类的__new__方法就不会被调用了,python会调用子类的__new__方法。 于是,可以证明在单继承情况下: python的内置方法的resolution的过程,实际上也是遵循继承关系的,即在子类中找不到的内置方法,就按照__MRO__的顺序去寻找对应的内置方法,然后调用。 上面的测试只是单继承情况,证据还不多,来测试一下多继承的情况。 多继承下的__new__方法是按照继承关系来确定的吗?
测试结果: (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>) 这个测试代码中,实际上是按照MRO顺序寻找的。
测试结果: (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>) 该例中,也是按照MRO顺序寻找的。 总结: pyhton子类的__new__方法是按照MRO顺序寻找的,一旦确定__new__,就停止寻找。 其实,python的任何内置方法都是按照MRO顺序寻找的。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 15:40:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |