私は 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
与えられます。そして私の質問は、次のように変更すると、このアクセスが保証されなくなった理由です。Renderer
Application
Renderer
renderer.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'