在没有重新定义的情况下将对象导入python中的命名空间?

时间:2012-09-13 13:59:18

标签: python namespaces

我想知道是否可以将对象导入到诸如类等的命名空间中。因此可以引用它。基本上删除了明确的重新定义:

import Bar

class Foo:
   X = Bar.X
   Y = Bar.Y
   Z = Bar.Z

我基本上对能够从Foo引用Bar.X等感兴趣。来自... import ...无法按预期工作。

1 个答案:

答案 0 :(得分:0)

我觉得你不应该这样做(对我来说这感觉真是个坏主意)。但是,如果你坚持,这是我的尝试:

import module
class Foo(object):
    pass #Other stuff here

for k,v in module.__dict__.items():
    try:
       setattr(Foo,k,v)
    except AttributeError:
       pass  #read-only attributes?

当然,由您(程序员)来确保您不会使用Foo属性覆盖module的任何属性。


请注意,如果您只想在导入时更改模块的名称,则可以这样做:

import Foo as Bar

或者你可以from import ... as name_in_this_module

例如,假设你有一些特定于Windows的东西和一个在Unix上提供相同功能的自定义模块:

try:
    import windows_module as sys_dep_mod
except ImportError:
    import unix_module as sys_dep_mod

def myfunc(baz):
    bar = sys_dep_mod.func(baz)
    #do something with bar
    #return something