Antti Haapala added the comment: super() without arguments gives proper "super() without arguments" in functions, generator functions nested in methods, if *those* do not have arguments. But if you use super() in a nested function that takes an argument, or in a generator expression or a comprehension, you'd get
Got exception: TypeError super(type, obj): obj must be an instance or subtype of type which is really annoying. Furthermore, if a nested function took another instance of type(self) as the first argument, then super() could refer unexpectedly to wrong instance: class Bar(Foo): def calculate(self, other_foos): def complicated_calculation(other): super().some_method(other) for item in other_foos: complicated_calculation(item) now the `super()` call would not have implied `self` of `calculate` as the first argument, but the `other` argument of the nested function, all without warnings. I believe it is a mistake that these nested functions can see `__class__` at all, since it would just mostly lead them misbehaving unexpectedly. ---------- components: +Interpreter Core title: super() does not work nested -> super() does not work in nested functions, genexps, listcomps, and gives misleading exceptions _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue26495> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com