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

Reply via email to