徐晓静,外挂网,邮编100020
Python 能区分 d.pong() 调用的是哪个方法,是因为 Python 会按照特定
的顺序遍历继承图。这个顺序叫方法解析顺序(Method Resolution
Order,MRO)。类都有一个名为 __mro__ 的属性,它的值是一个元
组,按照方法解析顺序列出各个超类,从当前类一直向上,直到
object 类。D 类的 __mro__ 属性
class A(object): def ping(self): print('ping:', self) class B(A): def pong(self): print('pong:', self) class C(A): def pong(self): print('PONG:', self) class D(B, C): def ping(self): super(self).ping() print('post-ping:', self) def pingpong(self): self.ping() super(self).ping() self.pong() super(self).pong() C.pong(self) if __name__ == "__main__": print D.__mro__
结果如下
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>)
分析类时,我经常在交互式控制台中查看 __mro__ 属性
def print_mro(cls): print ','.join(i.__name__ for i in cls.__mro__) print_mro(D)
结果如下:
D,B,C,A,object
[Finished in 0.1s]
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Python爬虫:Request Payload和Form Data的简单区别说明
浅谈Python中threading join和setDaemon用法及区别说明
Python3-异步进程回调函数(callback())介绍
python继承threading.Thread实现有返回值的子类实例
Python中使用threading.Event协调线程的运行详解
网友评论