我想知道是否可以将对象导入到名称空间中,例如类等。因此可以引用它。基本上在这里删除显式的重新定义:
import Bar
class Foo:
X = Bar.X
Y = Bar.Y
Z = Bar.Z
我基本上对能够从 Foo 引用 Bar.X 等感兴趣。from ... import ... 也没有按预期工作。
我想知道是否可以将对象导入到名称空间中,例如类等。因此可以引用它。基本上在这里删除显式的重新定义:
import Bar
class Foo:
X = Bar.X
Y = Bar.Y
Z = Bar.Z
我基本上对能够从 Foo 引用 Bar.X 等感兴趣。from ... import ... 也没有按预期工作。
我觉得你永远不需要这样做(这对我来说是一个非常糟糕的主意)。但是,如果您坚持,这是我的尝试:
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