模块functools
指的是在_functools
中定义的reduce
。
同时,_functools
指的是在functools
中定义的partial
。
当我试图创建一个命名空间副本以进行猴子补丁时,我遇到了这个问题。但在我的情况下,我需要旧功能和猴子补丁功能,因此需要复制。有什么好的方法可以解决这种循环依赖关系吗?
使用Python 2.7.10
根据请求提供一些源代码
def _get_dependent_modules(m):
"""Return set of all modules defining symbols in given module."""
modules = set()
for symbol_name, symbol in m.__dict__.items():
if hasattr(symbol, '__module__'):
if symbol.__module__ in sys.modules:
print "Symbol %s, defined in %s" % (symbol_name, symbol.__module__)
modules.add(sys.modules[symbol.__module__])
else:
print "Cant find module for %s" %(symbol)
return modules
_get_dependent_modules(functools)
Symbol wraps, defined in functools
Symbol partial, defined in functools
Symbol update_wrapper, defined in functools
Symbol total_ordering, defined in functools
Symbol reduce, defined in _functools
Symbol cmp_to_key, defined in functools
_get_dependent_modules(sys.modules["_functools"])
Symbol partial, defined in functools
Symbol reduce, defined in _functools
reduce
都在这两个库里。你可以通过sys.modules["functools"].__dict__["reduce"]
在functools
中找到reduce
函数。 - Yaroslav Bulatov_functools
中定义,因此我需要复制_functools
中的所有符号,并更新这些符号的__globals__
指向新模块。但是由于_functools
引用了在functools
中定义的partial
,所以我应该先重写functools
。但这是一个循环依赖。 - Yaroslav Bulatov