如何在其他函数中使用自定义类传递的目录参数读取目标文件
实现方案
你现有代码存在3个需要调整的点:
- 创建的
Dir类实例没有赋值给变量存储,后续函数无法获取到你设置的路径 get_currencyid中不能直接将Dir类对象和字符串拼接,需要访问实例的.dir属性获取实际的路径字符串- 直接拼接路径容易出现斜杠不匹配的问题,推荐用
os.path.join处理路径拼接
最小修改版本(仅调整原有逻辑)
import json import os class Dir: def __init__(self, dir_path): self.dir = dir_path def get_currencyid(name, dir_obj: Dir): # 访问dir_obj的dir属性获取路径,用os.path.join拼接更稳妥 file_path = os.path.join(dir_obj.dir, 'currency.json') with open(file_path, 'r') as f: data = json.load(f) for effect in data.keys(): if name in data[effect]['name']: return data[effect]['id'] def get_all_currencies(dir_obj: Dir): file_path = os.path.join(dir_obj.dir, 'currency.json') with open(file_path, 'r') as f: data = json.load(f) for effect in data.keys(): print("NAME:", data[effect]['name'], ": ID:", data[effect]['id']) # 把Dir实例赋值给变量存储 my_dir = Dir(r"C:\Users\me\AppData\Roaming\Firebot") # 调用函数时传入存储了路径的Dir实例即可 print(get_currencyid("Points", my_dir)) get_all_currencies(my_dir)
更合理的面向对象封装版本(调用更简便)
将方法整合到Dir类内部,设置一次路径后就可以直接调用方法,不需要每次传路径参数:
import json import os class Dir: def __init__(self, dir_path): self.dir = dir_path # 初始化的时候直接拼接好json文件路径,不用每次调用方法都重复拼接 self.currency_file = os.path.join(self.dir, 'currency.json') def get_currencyid(self, name): with open(self.currency_file, 'r') as f: data = json.load(f) for effect in data.keys(): if name in data[effect]['name']: return data[effect]['id'] def get_all_currencies(self): with open(self.currency_file, 'r') as f: data = json.load(f) for effect in data.keys(): print("NAME:", data[effect]['name'], ": ID:", data[effect]['id']) # 初始化一次路径 my_dir = Dir(r"C:\Users\me\AppData\Roaming\Firebot") # 直接调用实例方法即可,不需要重复传路径 print(my_dir.get_currencyid("Points")) my_dir.get_all_currencies()
内容的提问来源于stack exchange,提问作者Dad The Gamer
相关产品推荐
相关产品推荐

