通过sys.modules导出对象

时间:2015-01-07 14:06:40

标签: python python-2.7 import python-3.3

  1. 我喜欢小型,自包含的模块,有时包含单个类或单个函数,例如

    def decorator(function):
        return function
    
  2. 按照惯例,我只使用完整的绝对导入,例如

    # Yes
    import module
    module.function()
    
    # No
    from module import function
    function()
    
  3. 总之,这可能会变得令人烦恼,例如。

    import decorator
    
    @decorator.decorator
    def function():
        pass
    

    所以我喜欢通过sys.modules导出模块以外的东西,例如

    import sys
    
    def decorator(function):
        return function
    
    sys.modules[__name__] = decorator
    

    然后,

    import decorator
    
    @decorator
    def function():
        pass
    

    这是介绍;我是否应该这样做不是问题。问题是这种奇怪的行为:

    # foo.py
    
    import sys
    
    x = 1
    
    def foo():
        print(x)
    
    sys.modules[__name__] = foo
    

    然后,

    >>> import foo
    >>> foo()
    None
    

    还有陌生人,这只发生在Python 2.7中;在Python 3.4中它按预期工作!我的问题是,为什么会发生这种情况,我怎样才能在Python 2.7中使用它?

    感谢。

0 个答案:

没有答案