python oop 继承_Python OOP继承:方法解析顺序(MRO)

当我使用方法分辨率顺序(MRO)时,输出会有变化.任何人都可以解释为什么这种结果差异.

class A:

def __init__(self):

pass

def abc(self):

print("A")

class B(A):

def __init__(self):

pass

def abc(self):

super().abc()

print("B")

class C(A):

def __init__(self):

pass

def abc(self):

super().abc()

print("C")

class D(B,C):

def __init__(self):

super().abc()

print("D")

obj=D()

Output:

A

C

B

D

//Using Method Resolution Order (MRO):

print(D.__mro__)

Output:(, , , , )

解决方法:

您的输出只是相反的,因为您以后顺序遍历了继承树.您首先遍历层次结构,然后打印出该语句.您需要切换此行为.首先打印(访问该节点),然后遍历层次结构.

1. Loop:

|

+--1.1. Traversal (go hierarchy up)

|

+--1.2. Output (print)

您必须先打印该语句,然后遍历层次结构:

1. Loop:

|

+--1.1. Output (print)

|

+--1.2. Traversal (go hierarchy up)

更改打印顺序:

class A:

def __init__(self):

pass

def abc(self):

print("A")

class B(A):

def __init__(self):

pass

def abc(self):

print("B")

super().abc()

class C(A):

def __init__(self):

pass

def abc(self):

print("C")

super().abc()

class D(B,C):

def __init__(self):

print("D")

super().abc()

obj=D()

Output:

D

B

C

A

标签:python-3-x,python

来源: https://codeday.me/bug/20191119/2037662.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值