2

私のコードでいくつかの順序を得るために、あるクラスを別のクラスに入れました。内部クラスは外部クラスをまったく必要としません(少なくともそれは私が以前に考えていたことでした)。

コードとしての動作:

class A:
    def __init__(self):
        self.a=10
    def do(self):
        print(self.a)
        return A()
a=A()
print(a.do())
#this runs as expected with the output:
#10
#<__main__.A object at 0x01234567>

#cleaning up
del A

class B:
    #same code for class A
    class A:
        def __init__(self):
            self.a=10
        def do(self):
            print(self.a)
            return A()
a=B.A()
print(a.do())
#This raises for the line 'return A()' a NameError: global name 'A' is not defined

この場合、なぜ A が内部からアクセスできないのか理解できません。

ここで、同様で正常に動作する別のことを示します。

def f():
    a=10
    class C:
        def __init__(self):
            pass
        def do(self):
            print(a)
            return C()
    return C().do()
print(f())

追加の質問: この場合、クラスの動作が機能と異なるのはなぜですか。これから得られる利点は何ですか?

4

2 に答える 2