我需要通過提供幾個實現在獨立於平臺的模塊中創建一個函數,而不更改導入它的任何文件。以下作品:如何提供模塊的平臺特定實現?
do_it = getattr(__import__(__name__), "do_on_" + sys.platform)
...但休息如果模塊放到一個包。
另一種方法是使用do_it()中的其他硬編碼調用的if/elif。
還好嗎?
我需要通過提供幾個實現在獨立於平臺的模塊中創建一個函數,而不更改導入它的任何文件。以下作品:如何提供模塊的平臺特定實現?
do_it = getattr(__import__(__name__), "do_on_" + sys.platform)
...但休息如果模塊放到一個包。
另一種方法是使用do_it()中的其他硬編碼調用的if/elif。
還好嗎?
使用globals()['do_on_' + platform]
,而不是getattr
通話和你最初的想法應該工作,這是否是一個包內或沒有。
將平臺支持的代碼放在包中的不同文件中。然後將其添加到該文件的人都應該從導入:
if sys.platform.startswith("win"):
from ._windows_support import *
elif sys.platform.startswith("linux"):
from ._unix_support import *
else:
raise ImportError("my module doesn't support this system")
如果你需要創建一個類,你應該看看進入工廠模式的平臺特定實例: link text
Dive Into Python提供例外的選擇。
+1:從os包中複製設計模式。 – 2009-04-26 17:13:05