首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制命名空间时处理循环依赖(functools -> _functools -> functools)

复制命名空间时处理循环依赖(functools -> _functools -> functools)
EN

Stack Overflow用户
提问于 2016-05-22 01:26:35
回答 1查看 110关注 0票数 5

模块functools指的是_functools中定义的reduce。同时,_functools指的是functools中定义的partial

当我试图创建一个名称空间的副本来修补猴子时,我遇到了这个问题。但在我的例子中,我既需要旧的功能,也需要猴子修补的功能,因此需要一个副本。有什么建议什么是像这样循环依赖的好方法?

使用Python 2.7.10

每个请求的一些源代码

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-09-14 00:28:36

您可以简单地记住您所看到的(identity comparison到目前为止,而不是迭代或下降到您所记得的内容。

也许我不理解操作(复制名称空间)的复杂性。

这只是一个建议:

代码语言:javascript
复制
sub scan_symbols(object):
    for each member in object:
        if member is of type-primitive:
            whatever
        if member is of type-object:
            record member reference if not already recorded
            if reference is new:
                scan_symbols(member)

PHP中的真实代码示例:

https://raw.githubusercontent.com/pradosoft/prado/master/framework/Util/TVarDumper.php

这也避免了循环dep:

https://github.com/symfony/var-dumper

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37366039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档