Исходя из ваших комментариев о желании сделать это динамически , вы могли бы использовать super
, но вы должны понимать, как это работает, super
дает вам следующий метод в порядке разрешения методов , так что вы do имеете доступ к методам в A
из вашего миксина, но вы должны правильно использовать super
, чтобы что-то подобное могло работать:
In [1]: class Mixin:
...: def foo(self):
...: if hasattr(self, 'whatever'):
...: print("doing Mixin.foo stuff")
...: else:
...: return super().foo()
...:
In [2]: class A:
...: def foo(self):
...: print("doing A.foo stuff")
...:
In [3]: class C(Mixin, A):
...: pass
...:
In [4]: c = C()
In [5]: c.foo()
doing A.foo stuff
In [6]: c.whatever = 42
In [7]: c.foo()
doing Mixin.foo stuff
Однако я не уверен, насколько это рекомендуется. Но это возможно.
Обратите внимание, и под динамикой c я имею в виду что-то вроде этого работает:
In [9]: class Mixin:
...: def foo(self):
...: if hasattr(self, 'whatever'):
...: print("doing Mixin.foo stuff")
...: else:
...: return super().foo()
...: class A:
...: pass
...:
...: class B:
...: def foo(self):
...: print("doing B.foo stuff")
...:
...: class C(Mixin, A, B):
...: pass
...:
In [10]: c = C()
In [11]: c.foo()
doing B.foo stuff
In [12]: c.whatever = 42
In [13]: c.foo()
doing Mixin.foo stuff