You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在其他函数中使用自定义类传递的目录参数读取目标文件

实现方案

你现有代码存在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:57:00