我发布了一个3个小文件的程序的简洁示例,我想了解为什么更改几行代码会产生这种差异。了解beavhiour之间的更改:import modname - >和 - > from modname import membername
# 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'