2012-09-13 32 views
0

我想知道是否有可能將對象導入名稱空間,如類,等等,所以它可以被引用。這裏基本上消除了明確的重新定義:在不重新定義的情況下將對象導入python中的命名空間?

import Bar 

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

我在能夠引用Bar.X等..從富基本上感興趣。從...進口...沒有按預期工作。

+2

? –

+0

@esaelPsnoroMoN爲了簡化和抽象Bar導入X中的某個API – stgtscc

+0

,Y,Z確實可以將它們導入到當前模塊中。你能擴展你想要做什麼嗎?由於它們是來自Bar(全局)的模塊級別定義,因此它們在類中作爲實例定義是沒有意義的。 – jrwren

回答

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

例如,假設你有一些是具體的窗戶和一個自定義模塊,將提供在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 
+0

感謝您的回答,它確實完成了我所問的內容,但是我認爲您是對的:對於最終用戶而言,最終用戶可以使用的最終代碼分析工具不能自動完成。 – stgtscc

+0

@stgtscc - 你上面說過你試圖簡化一些API。看到我上面的編輯,它*可能*是有用的... – mgilson

相關問題