2013-04-03 102 views
3

請考慮以下Python模塊摘錄:Python模塊和對象名衝突

foo.py:

class Foo: 
    (...) 

bar.py:

import foo 

foo = foo.Foo() 

變量foo,它是一個模塊對象,被Foo對象覆蓋。

我知道我可以使用其他名稱的對象,例如:

foobar = foo.Foo() 

但語義更有意義在我的代碼把它叫做foo,因爲這將是唯一的實例。

(我試圖通過丟棄類和僅使用模塊來解決此,但我回去使用類,因爲使用的模塊只有「穩健性」的問題。)

這是怎樣的一個哲學問題的,但什麼是處理這個潛在的對象/模塊名稱衝突的「正確」方式?

+0

我不認爲所有模塊都有一個正確的方法 - 它確實取決於模塊名稱。正如@ F.J指出的那樣,你可以將它導入爲不同的東西,但我會盡快更改我的變量名稱。你的具體情況是什麼模塊和類名? – 2013-04-03 23:17:34

+0

模塊/類名稱是相機,網絡,gpio,數據庫等。 – 2013-04-04 00:43:18

+0

是的,我可以看到你想如何命名'camera.Camera()'實例'camera'。也許只是導入類名而不是整個模塊,就像在'from camera import Camera'中一樣?然後你可以安全地使用'camera'作爲你的變量名。 – 2013-04-04 01:33:48

回答

6

在我看來沒有什麼錯與您正在做什麼,而是爲了更清楚給大家閱讀的代碼我建議改變你的代碼,類似以下內容:

import foo as foo_mod 

foo = foo_mod.Foo() 

或可替代:

from foo import Foo 

foo = Foo() 

這可以防止名稱衝突,因此會更加明顯,你的模塊中的變量foo不會指向同一個名字的模塊。

+0

謝謝,我不知道這個替代模塊的重命名。 – 2013-04-04 00:44:14