5
模塊functools
是指在_functools
中定義的reduce
。 同時_functools
指partial
這是在functools
複製命名空間時處理循環依賴(functools - > _functools - > functools)
試圖創建命名空間的副本猴修補的目的時,我遇到了這個問題定義。但就我而言,我需要舊功能和猴子功能,因此需要一個副本。任何建議什麼是這樣循環依賴的好方法?
使用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
似乎'減少'在兩個。你可以用'sys.modules [「functools」] .__ dict __ [「reduce」]看到'functools'中的'reduce'' –
更新了一些源代碼 –
所以如果我動態地重寫模塊,應該重寫哪一個模塊第一?由於在'_functools'中定義了reduce,因此我需要複製'_functools'中的所有符號,並更新這些符號的所有'__globals__'以指向新模塊。但由於'_functools'引用了'functools'中定義的'partial',我應該首先重寫'functools'。但這是一個循環依賴 –