A colleague of mine wrote code analogous to the following today, asked me to have a look, and it took me a while to spot the mistake:
class A():
def __init__(self):
print('A')
class B(A):
def __init__(self):
super(B).__init__()
b = B()
The problem here is that there's no self
parameter to super()
in B
's constructor. What surprised me is that absolutely nothing happens in this case, i.e. no error, nothing. What does the super
object created by super(B)
contain? As an object, it clearly has a constructor, so that's what gets called, but how is that object related to B
? In particular, why is this valid code and doesn't throw an exception somewhere? Is super(B)
an object with some actual use and what would that be?