I have encountered the following code. An object constructor calls itself:
class StatusMixin(object):
def __init__(self):
super(StatusMixin, self).__init__()
self.does_something()
Is there any practical reason why it is implemented like this? I think people use thesuper method only in the context of multiple inheritance.
You mention multiple inheritance. This class is described as a mixin: that is, it's specifically intended to be used in the case of multiple inheritance. It will be one of the elements in a class hierarchy, but not the top or the bottom. That's why it calls super - the next item in the method resolution order will not in practice be object, but some other class.
Consider this hierarchy:
class Super(object):
pass
class Sub(StatusMixin, Super)
pass
and examine Sub.mro():
[__main__.Sub, __main__.StatusMixin, __main__.Super, object]
So you see that here the result of the super call in StatusMixin is not object at all, but Super.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With