class Soul:
def __init__(self):
print('Spirit...')
class Body:
def __init__(self):
print('Physics...')
class Human1(Soul, Body):
def __init__(self):
super().__init__()
me = Human1() # 'Spirit...'
class Human2(Body, Soul):
def __init__(self):
super().__init__()
other_me = Human2() # 'Physics...'
SomeClass.mro()
dir(obj)
class F: pass
class E: pass
class D: pass
class C(D, F): pass
class B(D, E): pass
class A(B, C): pass
from pprint import pprint
pprint(A.mro())
[<class '__main__.A'>,
<class '__main__.B'>,
<class '__main__.C'>,
<class '__main__.D'>,
<class '__main__.E'>,
<class '__main__.F'>,
<class 'object'>]
class A: pass
class B: pass
class C(A, B) : pass
class D(B, A): pass
class E(C, D): pass
print(E.mro())
Traceback (most recent call last):
File "demo.py", line 13, in <module>
class E(C,D): pass
TypeError: Cannot create a consistent method resolution
order (MRO) for bases A, B
An MRO is said to be monotonic if C1 precedes C2 in the linearization of C, then C1 precedes C2 in the linearization of any subclass of C.
class UserListView(
WithAuthentication, # mixin
WithHandleExceptions, # mixin
BaseListView # not mixin
):
pass