2009-04-26 78 views
2

我需要通過提供幾個實現在獨立於平臺的模塊中創建一個函數,而不更改導入它的任何文件。以下作品:如何提供模塊的平臺特定實現?

do_it = getattr(__import__(__name__), "do_on_" + sys.platform)

...但休息如果模塊放到一個包。

另一種方法是使用do_it()中的其他硬編碼調用的if/elif。

還好嗎?

回答

2

使用globals()['do_on_' + platform],而不是getattr通話和你最初的想法應該工作,這是否是一個包內或沒有。

4

將平臺支持的代碼放在包中的不同文件中。然後將其添加到該文件的人都應該從導入:

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") 
+0

+1:從os包中複製設計模式。 – 2009-04-26 17:13:05

1

如果你需要創建一個類,你應該看看進入工廠模式的平臺特定實例: link text

相關問題