On 10/10/2013 01:04 PM, Ned Batchelder wrote:

On 10/10/13 3:22 AM, Marco Buttu wrote:
>>> import inspect
>>> class B(A):
...     def bfoo(*args):
...         frame = inspect.currentframe()
...         for obj, value in frame.f_locals.items():
...             print(obj, value, sep=' --> ')
...         # super().afoo(*args[1:])
...
>>> B().bfoo(1, 2, 3)
args --> (<__main__.B object at 0x7f28c960a590>, 1, 2, 3)
frame --> <frame object at 0x7f28cad4b240>

So, why does not super use it?


Python has never claimed the kind of purity that makes everything work
in a totally simple consistent way.  super() with no args is a kind of
hack to begin with.  It involves a special case in the compiler (so that
using the name "super" as a function call will act as if you had
accessed the name "__class__" so that super can find it later), and
inspecting the stack frame during execution.

It seems reasonable

It's an interesting case of the Zen of Python.  It violates one
("explicit is better than implicit"), but only because of another one
("practicality beats purity").  super(MyClass, self) in Python 2 is the
kind of brain-bender that so many people get wrong at first, that it's
helped plenty of people to do the arguments implicitly, even if there
are oddball edge cases that it doesn't seem to handle properly.

--Ned.

Thanks for the comprehensive answer ;)

--
Marco Buttu
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to