I wonder when to use what flavour of Python 3 super().
Help on class super in module builtins:
class super(object)
| super() -> same as super(__class_
Let's use the following classes for demonstration:
class A(object):
def m(self):
print('m')
class B(A): pass
Unbound super
object doesn't dispatch attribute access to class, you have to use descriptor protocol:
>>> super(B).m
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'super' object has no attribute 'm'
>>> super(B).__get__(B(), B)
, >
super
object bound to instance gives bound methods:
>>> super(B, B()).m
>
>>> super(B, B()).m()
m
super
object bound to class gives function (unbound methods in terms of Python 2):
>>> super(B, B).m
>>> super(B, B).m()
Traceback (most recent call last):
File "", line 1, in
TypeError: m() takes exactly 1 positional argument (0 given)
>>> super(B, B).m(B())
m
See Michele Simionato's "Things to Know About Python Super" blog posts series (1, 2, 3) for more information