2015-09-25 107 views
-4

兩個模塊:如何導入兩個使用相同名稱的模塊?

#foo.py 
def foo(): 
    print("foo") 

#bar.py 
def bar(): 
    print("bar") 

我想導入這兩個模塊,並把它們放在一起在同一個命名空間,如下所示(不工作):

import foo as a 
import bar as a 

a.foo() # Error :(
a.bar() 

你如何才能使它工作?

+2

爲什麼你不能將foo作爲a和bar導入爲b? –

+0

因爲如果兩者都具有相同的名稱,它會更好。例如:'將tkinter導入爲tk'並將bwidget導入爲tk' – David

+0

爲什麼它會更好地工作?如果兩個模塊都有同名的功能呢? – Psytho

回答

1
import foo as a 
import bar 

# alias everything, you can use `bar.__all__` to automate this 
a.bar = bar.bar 

a.foo() 
a.bar() 

但是,我會建議不要這樣做,因爲它會導致未來的代碼維護者頭痛。

+0

感謝您的回答,這只是我的一個想法,而且我認爲這會讓事情變得更簡單。 – David

1

在第一次導入時,您將foo賦值爲「a」。 在第二次導入時,用條形覆蓋它。這就是爲什麼錯誤。

來到你的問題 - 除非是字典,列表,元組等,否則你不能指定單個變量的多個值。

當您覆蓋一個變量時,您將其賦值爲一個新值,而不是保留這兩個值。這就是你的進口產品。

2

您可以創建一個包含兩者的新模塊。但是請注意,任何功能/班/不管,似乎有兩個模塊在同一個名字只被定義爲從最後導入模塊一:

merger.py

from foo import * 
from bar import * 

your_code.py

import merger as a 

a.foo() 
a.bar() 

且不說其中a.foobaz()呼叫首先定義跟蹤的難度。

相關問題