gpt4 book ai didi

python - 如何创建多对多关系变量并提高代码可用性?

转载 作者:行者123 更新时间:2023-11-30 22:01:37 25 4
gpt4 key购买 nike

我正在尝试创建一个通用实用程序,用于从源到目标的文件传输。参数分为 dirfilename,这是 os.path.dirname(some_file)os.path 的结果.basename(some_file) 分别。如果不指定,目标文件名默认与源文件名相同。

我创建了一个脚本,至少可以完美地满足我的第一个项目中的特定要求。但正如您所注意到的,get_src_des 方法非常重复,我想提高代码的可重用性,摆脱令人讨厌的 if...elif...声明。有人有更好的想法重写这个方法吗?

class FileTransfer:

def __init__(self, ftp_dir, local_dir, ftp_filename=None, local_filename=None):
self.ftp_dir = ftp_dir
self.ftp_filename = ftp_filename
self.local_dir = local_dir
self.local_filename = local_filename

self.ftp_dict = self.get_group(ftp_dir, ftp_filename)
self.local_dict = self.get_group(local_dir, local_filename)

@staticmethod
def get_group(dir, filename):
group = {
"dir": dir,
"filename": filename,
}
return group

def get_src_des(self, src):
if src == "ftp":
dict_src = self.ftp_dict
dict_des = self.local_dict
elif src == "local":
dict_src = self.local_dict
dict_des = self.ftp_dict
else:
dict_src = None
dict_des = None

return dict_src, dict_des

# other methods, such as download_from_src_to_des, upload_from_src_to_des, ...

最佳答案

是的。这是字典的经典用例。

您可以按如下方式重写代码:

class FileTransfer:

def __init__(self, ftp_dir, local_dir, ftp_filename=None, local_filename=None):
self.ftp_dir = ftp_dir
self.ftp_filename = ftp_filename
self.local_dir = local_dir
self.local_filename = local_filename

self.ftp_dict = self.get_group(ftp_dir, ftp_filename)
self.local_dict = self.get_group(local_dir, local_filename)
self.param_dict = {
'ftp':(self.ftp_dict,self.local_dict),
'local' : (self.local_dict,self.ftp_dict)
}

@staticmethod
def get_group(dir, filename):
group = {
"dir": dir,
"filename": filename,
}
return group

def get_src_des(self, src):
if src in param_dict:
return param_dict[src]

else:
return (None,None)

下次,您只需在 param_dict 中添加另一个条目,而不是添加另一个 elif 语句

关于python - 如何创建多对多关系变量并提高代码可用性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53999085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com