Python 模块与面向对象编程深度解析
1. 模块陷阱与递归导入问题
在 Python 编程中,模块的使用存在一些容易被忽视的陷阱,尤其是递归导入问题。下面我们先来看一段用于模块重载的代码:
import types
def status(module):
print 'reloading', module.__name__
def transitive_reload(module, visited):
if not visited.has_key(module):
# Trap cycles, dups
status(module)
# Reload this module
reload(module)
# And visit children
visited[module] = None
for attrobj in module.__dict__.values():
# For all attrs
if type(attrobj) == types.ModuleType:
# Recur if module
transitive_reload(attrobj, visited)
def reload_all(*args):
visited = {}
for arg in args:
if type(arg) == types.ModuleType: