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?
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.
来源:https://stackoverflow.com/questions/18341914/nested-class-is-not-defined-in-itself