在python中将对象导入命名空间而不重新定义?

在python中将对象导入命名空间而不重新定义?,python,namespaces,Python,Namespaces,我想知道是否有可能将对象导入一个名称空间,比如类等。。可供参考。基本上删除了此处的明确重新定义: import Bar class Foo: X = Bar.X Y = Bar.Y Z = Bar.Z 我基本上对能够参考Bar.X等感兴趣。。。来自福。从…起导入。。。也没有达到预期效果。我觉得你根本不需要这样做(我觉得这是个非常糟糕的主意)。然而,如果你坚持,我的尝试如下: import module class Foo(object): pass #Other s

我想知道是否有可能将对象导入一个名称空间,比如类等。。可供参考。基本上删除了此处的明确重新定义:

import Bar

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

我基本上对能够参考Bar.X等感兴趣。。。来自福。从…起导入。。。也没有达到预期效果。

我觉得你根本不需要这样做(我觉得这是个非常糟糕的主意)。然而,如果你坚持,我的尝试如下:

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?
当然,由您(程序员)来确保您不会用
module
的属性覆盖
Foo
的任何属性


请注意,如果您只想在导入时更改模块的名称,可以执行以下操作:

import Foo as Bar
或者您可以从导入中
。。。作为本模块中的名称_

例如,假设您有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

@esaelPsnoroMoN从导入X、Y、Z简化和抽象某个APIBAR,并将其导入当前模块。你能详述一下你想做什么吗?因为它们是来自Bar(全局)的模块级定义它们作为类中的实例定义是没有意义的。谢谢你的回答,它确实完成了我的问题,但是我想你是对的:它不一定能让最终用户清楚地知道最终代码分析工具中有什么是不能自动完成的。@stgtscc——你在上面说过你在试图简化一些应用程序编程接口。见我的编辑上面,它可能是有用的。。。