0

我想知道是否可以将对象导入到名称空间中,例如类等。因此可以引用它。基本上在这里删除显式的重新定义:

import Bar

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

我基本上对能够从 Foo 引用 Bar.X 等感兴趣。from ... import ... 也没有按预期工作。

4

1 回答 1

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
于 2012-09-13T14:05:59.310 回答