1

私は 3 つの小さなファイルのプログラムのコンパクトな例を投稿しています。なぜ数行を変更するとこの違いが生じるのかを理解したいと思います。

# main.py

from renderer import Renderer
import shared

class Application():
    def __init__(self):
        self.isRunning = True
        self.renderer = Renderer()
        self.globalize()
    def globalize(self):
        shared.app = self

def main():
    app = Application()
    while ( app.isRunning ):
        app.renderer.quit()
    print "program end"

if __name__ == "__main__":
    main()

# shared.py
app = None

# renderer.py
import shared
class Renderer():
    def __init__(self):
        pass
    def quit(self):
        shared.app.isRunning = False

さて、このファイルの使用法により、私が念頭に置いていた悪魔的なプログラム設計のために、メンバーとしてのインスタンスを持つクラスへのアクセスがクラスにshared.py与えられます。そして私の質問は、次のように変更すると、このアクセスが保証されなくなった理由です。RendererApplicationRendererrenderer.py


# renderer.py -- ( new )
from shared import app
class Renderer():
    def __init__(self):
        pass
    def quit(self):
        app.isRunning = False

オリジナルrenderer.pyはプログラムを終了させ、renderer.py後者は例外を発生させましたが、これはなぜですか?

renderer.py", line 7, in quit
app.isRunning = False
AttributeError: 'NoneType' object has no attribute 'isRunning'
4

2 に答える 2