栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python-新型类中的方法解析顺序(MRO)?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-新型类中的方法解析顺序(MRO)?

当在“天真”的深度优先方法中,同一祖先类出现多次时,旧类与新类的解析顺序之间的关键区别就出现了:例如,考虑“钻石继承”情况:

>>> class A: x = 'a'... >>> class B(A): pass... >>> class C(A): x = 'c'... >>> class D(B, C): pass... >>> D.x'a'

在这里,是传统样式,解析顺序为D-B-A-C-A:因此,在查找Dx时,A是解析顺序中解决它的第一个基数,从而将定义隐藏在C中。

>>> class A(object): x = 'a'... >>> class B(A): pass... >>> class C(A): x = 'c'... >>> class D(B, C): pass... >>> D.x'c'>>> 

在这里,新式的顺序是:

>>> D.__mro__(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>,     <class '__main__.A'>, <type 'object'>)

与A被迫来到分辨率顺序只有一次,毕竟它的子类,从而使覆盖(即尺寸材料的的覆盖x)实际上有效地工作。

这是应避免使用旧式类的原因之一:“菱形”模式的多重继承对它们不起作用,而对新式则可行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/404753.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号