本篇内容主要讲解“python面试题代码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python面试题代码分析”吧!
class A: def who(self): print('A', end='') class B(A): def who(self): super(B, self).who() print('B', end='') class C(A): def who(self): super(C, self).who() print('C', end='') class D(B, C): def who(self): super(D, self).who() print('D', end='') item = D() item.who()
点评:这道题考查到了两个知识点:
Python中的MRO(方法解析顺序)。在没有多重继承的情况下,向对象发出一个消息,如果对象没有对应的方法,那么向上(父类)搜索的顺序是非常清晰的。如果向上追溯到
object
类(所有类的父类)都没有找到对应的方法,那么将会引发AttributeError
异常。但是有多重继承尤其是出现菱形继承(钻石继承)的时候,向上追溯到底应该找到那个方法就得确定MRO。Python 3中的类以及Python 2中的新式类使用C3算法来确定MRO,它是一种类似于广度优先搜索的方法;Python 2中的旧式类(经典类)使用深度优先搜索来确定MRO。在搞不清楚MRO的情况下,可以使用类的mro
方法或__mro__
属性来获得类的MRO列表。
super()
函数的使用。在使用super
函数时,可以通过super(类型, 对象)
来指定对哪个对象以哪个类为起点向上搜索父类方法。所以上面B
类代码中的super(B, self).who()
表示以B类为起点,向上搜索self
(D类对象)的who
方法,所以会找到C
类中的who
方法,因为D
类对象的MRO列表是D --> B --> C --> A --> object
。
ACBD
到此,相信大家对“python面试题代码分析”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。