我想知道是否有可能將對象導入名稱空間,如類,等等,所以它可以被引用。這裏基本上消除了明確的重新定義:在不重新定義的情況下將對象導入python中的命名空間?
import Bar
class Foo:
X = Bar.X
Y = Bar.Y
Z = Bar.Z
我在能夠引用Bar.X等..從富基本上感興趣。從...進口...沒有按預期工作。
我想知道是否有可能將對象導入名稱空間,如類,等等,所以它可以被引用。這裏基本上消除了明確的重新定義:在不重新定義的情況下將對象導入python中的命名空間?
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?
當然,這取決於你(程序員),以確保您不會覆蓋的Foo
任何屬性與module
屬性。
請注意,如果你只是想改變導入模塊的名稱,你可以這樣做:
import Foo as Bar
或者你可以from import ... as name_in_this_module
。
例如,假設你有一些是具體的窗戶和一個自定義模塊,將提供在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爲了簡化和抽象Bar導入X中的某個API – stgtscc
,Y,Z確實可以將它們導入到當前模塊中。你能擴展你想要做什麼嗎?由於它們是來自Bar(全局)的模塊級別定義,因此它們在類中作爲實例定義是沒有意義的。 – jrwren