gpt4 book ai didi

Python多重继承的方法解析执行顺序实例分析

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python多重继承的方法解析执行顺序实例分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了Python多重继承的方法解析执行顺序。分享给大家供大家参考,具体如下:

任何实现多重继承的语言都要处理潜在的命名冲突, 这种冲突由不相关的祖先类实现同名方法引起 。

Python多重继承的方法解析执行顺序实例分析

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A:
   def say( self ):
     print ( "A Hello:" , self )
class B(A):
   def eat( self ):
     print ( "B Eating:" , self )
class C(A):
   def eat( self ):
     print ( "C Eating:" , self )
class D(B, C):
   def say( self ):
     super ().say()
     print ( "D Hello:" , self )
   def dinner( self ):
     self .say()
     super ().say()
     self .eat()
     super ().eat()
     C.eat( self )

这里B和C都实现了eat方法, 。

在 D 的实例上调用 d.eat() 方法的话, 运行的是哪个 eat 方法呢?

?
1
2
3
4
5
>>> d = D()
>>> d.eat()
B Eating: <__main__.D object at 0x7fb90c627f60 >
>>> C.eat(d)
C Eating: <__main__.D object at 0x7fb90c627f60 >

超类中的方法都可以直接调用, 此时要把实例作为显式参数传入 。

Python 能区分 d.eat() 调用的是哪个方法, 是因为 Python 会按照特定的顺序遍历继承图。 这个顺序叫方法解析顺序( Method Resolution Order, MRO)。 类都有一个名为 __mro__ 的属性, 它的值是一个元组, 按照方法解析顺序列出各个超类, 从当前类一直向上, 直到object 类。 D 类的 __mro__ 属性如下 :

?
1
2
3
4
5
6
7
8
9
10
>>> D.__mro__
(< class '__main__.D' >, < class '__main__.B' >, < class '__main__.C' >, < class 'object' >)
>>> d = D()
>>> d.dinner()
A Hello: <__main__.D object at 0x7fb90bd7eb70 >
D Hello: <__main__.D object at 0x7fb90bd7eb70 >
A Hello: <__main__.D object at 0x7fb90bd7eb70 >
B Eating: <__main__.D object at 0x7fb90bd7eb70 >
B Eating: <__main__.D object at 0x7fb90bd7eb70 >
C Eating: <__main__.D object at 0x7fb90bd7eb70 >

第一个self.say(),运行A类的say()再print出自己的第二行信息 第二个super().say(),运行A类的say() 第三个self.eat(),根据 __mro__ , 找到的是 B 类实现的eat方法 第四个super().eat(),根据 __mro__ , 找到的是 B 类实现的eat方法 第五个C.eat(self)忽略 mro , 找到的是 C 类实现的eat方法 。

希望本文所述对大家Python程序设计有所帮助.

原文链接:https://blog.csdn.net/u011019726/article/details/77712080 。

最后此篇关于Python多重继承的方法解析执行顺序实例分析的文章就讲到这里了,如果你想了解更多关于Python多重继承的方法解析执行顺序实例分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com