From 7e4c3f1d1cdf409cdad4ba423bebd446427148b1 Mon Sep 17 00:00:00 2001 From: moyanj <1561515308@qq.com> Date: Mon, 9 Sep 2024 15:44:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0=E4=B8=8E`.?= =?UTF-8?q?idea/`=E5=BF=BD=E7=95=A5=E9=A1=B9=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在`app/config.py`中为`Config`类添加了详细的中文文档说明,增强了代码可读性和配置管理的清晰度。 - 修改`.gitignore`以忽略`.idea/`目录,适用于 JetBrains IDEs 的项目,保持工作区的整洁。 --- .gitignore | 2 +- app/config.py | 46 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 82f9275..7b6caf3 100644 --- a/.gitignore +++ b/.gitignore @@ -159,4 +159,4 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ +.idea/ diff --git a/app/config.py b/app/config.py index 4374528..1cca4ea 100644 --- a/app/config.py +++ b/app/config.py @@ -3,12 +3,38 @@ import json5 import app.env as env class Config: + """ + 配置类,用于加载和管理应用配置。 + + 该类通过读取配置文件并将内容映射到实例属性中,使得配置项可以像访问普通属性一样被访问。 + 它支持递归加载字典类型的配置项,以及直接加载列表和基本数据类型的配置项。 + """ + def __init__(self): + """ + 初始化Config实例,从配置文件中加载配置并更新实例属性。 + """ + # 加载配置文件并指定编码为utf-8,确保中文字符正确解析 self._conf_Dict = json5.load(os.path.join(env.dirs.user_config_path, "config.json"), encoding="utf-8") + # 设置实例的名称,用于标识配置类型 self.__name__ = "" + # 更新实例属性,将配置项映射为可直接访问的属性 self.update() def __getattr__(self, name): + """ + 当访问不存在的属性时,尝试从配置字典中获取相应的值。 + + 参数: + name (str): 试图访问的属性名。 + + 返回: + 配置字典中的对应值。 + + 异常: + 如果配置字典中也没有该属性名,则抛出AttributeError。 + """ + # 检查配置字典中是否存在该属性名 if name in self._conf_Dict: return self._conf_Dict[name] else: @@ -17,17 +43,35 @@ class Config: ) def update(self): + """ + 更新实例属性,将配置字典中的内容映射到实例属性中。 + + 该方法主要处理三种类型的配置项: + 1. 字典类型:递归创建Config实例并设置属性。 + 2. 列表类型:遍历列表,对字典项创建Config实例,其他项保持不变。 + 3. 基本数据类型:直接设置实例属性。 + """ + # 遍历配置字典中的所有项 for k, v in self._conf_Dict.items(): + # 如果值是字典类型,递归创建Config实例 if isinstance(v, dict): setattr(self, k, Config(v)) + # 如果值是列表类型,对列表中的字典项创建Config实例 elif isinstance(v, list): setattr( self, k, [Config(item) if isinstance(item, dict) else item for item in v], ) + # 如果值是基本数据类型,直接设置实例属性 else: setattr(self, k, v) def __str__(self): - return str(self._conf_Dict) + """ + 返回配置字典的字符串表示形式。 + + 返回: + 配置字典的字符串形式。 + """ + return str(self._conf_Dict) \ No newline at end of file