Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using super within nested class

I am puzzled with the following error in python 2.7.12 Suppose we have a class definition within a class, something similar to this:

class C(object):
    def __init__(self):
        print "class C"


class D(object):
    def __init__(self):
        print "class D"


class A(D):

    class B(C):
        def __init__(self):
            # Strangely here B is "not defined", why?
            super(B, self).__init__()
            print "class B"

    def __init__(self):
        super(D, self).__init__()
        print "class A"

    def do_something(self):
        b_class = self.B()
        print "b_class within A : {}".format(b_class)


a_class = A()
a_class.do_something()

but if we we extract the definition of class B outside the scope of class A, everything works well.

Do we need to use "super" differently when called within a nested class? I fail to understand why its usage would be different within or outside the nested class. Any pointers?

like image 876
TocToc Avatar asked Jun 28 '26 06:06

TocToc


1 Answers

The problem is not the subclass or superclass, but the nesting. B itself is not defined, only A.B is.

Note that in Python there is almost never a good reason to nest classes, though.

like image 50
Daniel Roseman Avatar answered Jun 29 '26 20:06

Daniel Roseman



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!