如何提供模块的平台特定实现?
我需要在一个模块中创建一个函数,让它在不同的平台上都能用,同时不想修改任何引用这个模块的文件。现在的做法是:
do_it = getattr(__import__(__name__), "do_on_" + sys.platform)
这样可以工作,但如果把这个模块放到一个包里就不行了。
另外一种方法是用if/elif语句,直接写死调用其他函数的代码在do_it()里面。
有没有更好的办法呢?
4 个回答
1
Dive Into Python 提供了处理异常的另一种方法。
5
把不同平台支持的代码放在你包里的不同文件中。然后把这个内容加到人们应该从中导入的文件里:
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")
2
用 globals()['do_on_' + platform]
代替 getattr
的调用,这样你的原始想法就可以在包里面或者外面都能正常工作。