Question

The following code successfully prints OK:

class B(object):
        def __init__(self):
            super(B, self).__init__()
            print 'OK'

class A(object):
    def __init__(self):
       self.B()

    B = B

A()

but the following which should work just as same as above one raises NameError: global name 'B' is not defined

class A(object):
    def __init__(self):
       self.B()

    class B(object):
        def __init__(self):
            super(B, self).__init__()
            print 'OK'
A()

why?

Was it helpful?

Solution

B is available in the scope of A class - use A.B:

class A(object):
    def __init__(self):
       self.B()

    class B(object):
        def __init__(self):
            super(A.B, self).__init__()
            print 'OK'

A()

See documentation on Python Scopes and Namespaces.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top