2009-04-26 34 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

相关问题