关于python 2.7:嵌套类本身没有定义

Nested class is not defined in itself

以下代码成功打印OK

1
2
3
4
5
6
7
8
9
10
11
12
class B(object):
        def __init__(self):
            super(B, self).__init__()
            print 'OK'

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

    B = B

A()

但与上述方法相同的是,以下方法会使NameError: global name 'B' is not defined上升。

1
2
3
4
5
6
7
8
9
class A(object):
    def __init__(self):
       self.B()

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

为什么?


BA类用途A.B范围内提供:

1
2
3
4
5
6
7
8
9
10
class A(object):
    def __init__(self):
       self.B()

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

A()

请参见有关python作用域和名称空间的文档。