Arnaud Delobelle
2/16/2010 2:48:00 PM
rludwinowski <rludwinowski@gmail.com> writes:
> class A:
> def __init__(self):
> print("A__init__")
>
> class B:
> def __init__(self):
> print("B__init__")
>
> class C(A, B):
> pass
>
> C()
>
>>> A__init__
>
> Why __init__ class B will not be automatic executed?
Because it's documented behaviour? By default, at initialisation, an
instance of C will go up the method resolution order and only execture
the first __init__() method found. If you want to change this, you have
to do it explicitely within the __init__ method(s) of the parent
class(es). E.g. try this (assuming Python 3 syntax):
class A:
def __init__(self):
super().__init__()
print("A__init__")
class B:
def __init__(self):
super().__init__()
print("B__init__")
class C(A, B):
pass
C()