我试图让__init__
执行顺序正确。层次结构由两个分支组成。左分支实现了右分支的一些抽象方法。在右分支也有一个分裂。现在我希望他们执行:首先从左上到下,然后从右上到下。
有没有办法在 Python 3 中实现这一点?
所以基本上以下应该按顺序打印数字(它没有):
from abc import abstractmethod, ABCMeta
class L1:
def __init__(self):
super().__init__()
print(1)
class R1(metaclass=ABCMeta):
def __init__(self):
super().__init__()
print(3)
@abstractmethod
def m(self):
pass
class L2(L1):
def __init__(self):
super().__init__()
print(2)
def m(self):
pass
class R2a(R1):
def __init__(self):
super().__init__()
print(4)
class R2b(R1):
def __init__(self):
super().__init__()
print(4)
class X(L2, R2a):
pass
class Y(L2, R2b):
pass
x = X()
print("--")
y = Y()
不幸的是,我无法更改 L2 和 R2 的顺序,因为 L2 实现了 R2 的抽象方法(如果我更改它会出现错误)。
可能吗?
(您知道如何考虑 MRO 以轻松解决此类问题吗?)
编辑:我认为我没关系,但我想指出,在我的真实结构中,L 侧实际上有一颗钻石,如 L2a(L1)、L2b(L1) 和 L2(L1a、L2a)。那就是完全拆分一些功能。