Moduł functools
odnosi się do reduce
, który jest zdefiniowany w _functools
. Tymczasem _functools
dotyczy partial
który jest zdefiniowany w functools
Radzenie sobie z zależnością cykliczną (funktools -> _functools -> functools) podczas kopiowania przestrzeni nazw
używam do tego problemu podczas próby utworzenia kopii przestrzeni nazw dla celów małpa-łatanie. Ale w moim przypadku potrzebuję zarówno starej, jak i małpiej funkcjonalności, dlatego potrzebuję kopii. Wszelkie sugestie, jaki jest dobry sposób na okrężne zależności, takie jak ten?
Korzystanie Python 2.7.10
jakiś kod źródłowy na życzenie
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
Wydaje 'zmniejszyć 'jest w obu. Możesz zobaczyć 'reduce' w' functools' z 'sys.modules [" functools "] .__ dict __ [" reduce "]' –
zaktualizowany o jakiś kod źródłowy –
Więc jeśli jestem dynamicznie przepisywanie modułów, które należy powinienem przepisać pierwszy? Ponieważ redu jest zdefiniowany w '_functools', muszę skopiować wszystkie symbole w' _functools' i zaktualizować wszystkie '__globals__' tych symboli, aby wskazywały na nowy moduł. Ale ponieważ '_functools' ma odniesienie do' częściowego 'zdefiniowanego w' functools', powinienem najpierw przepisać 'functools'. Ale to jest zależność cykliczna. –