我有一个程序,每个操作系统(Linux和Windows)需要不同的变量。为每个变量设置一个字典会更好吗:
# 'win'dows and 'lin'ux
system_root = { "win" : r"C:",
"lin" : r"/" }
data_folder = { "win" : r"C:\Program Files",
"lin" : r"/usr/share/applications" }
或每个OS变量的单独字典,如下所示:
vars_win = { "system_root" : r"C:",
"data_folder" : r"C:\Program Files" }
vars_lin = { "system_root" : r"/",
"data_folder" : r"/usr/share/applications" }
对不起,如果问题标题对我的意图不是很清楚,我想不出更好的方法来表达它。
答案 0 :(得分:2)
我更喜欢第二种解决方案,因为你可以这样做:
if platform == windows:
vars = win_vars
elif platform == posix:
vars = lin_vars
然后在你的应用程序中,你不必处理de branching。只需使用vars
变量。
注意:我没有指定检查平台的方法,因为根据您的需要有多种方式。您可以查看sys.platform
,使用platform
模块或检查posix
,nt
...是否在sys.builtin_module_names
。
答案 1 :(得分:0)
看起来对这些“变量”的大部分或全部访问都将使用常量键,因此更好的解决方案是使用类层次结构:
class CommonVars:
pass
class WindowsVars(CommonVars):
system_root = "C:\\"
data_folder = "C:\\ProgramData"
class LinuxVars(CommonVars):
system_root = "/"
data_folder = "/usr/share/applications"
if platform == windows:
vars = WindowsVars
elif platform == posix:
vars = LinuxVars
... do something with vars.system_root ...
如果看起来很有用,你可以使用特定于系统的行为方法将它们扩展为成熟的类。
在这个例子中没有使用基类,所以它可能完全是多余的,但我还是会包含它,以防万一你希望包含两个平台之间实际相同的系统属性,但如果你增加了对第三个人的支持。