我发布了一个包含 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'