gpt4 book ai didi

python - 将所有默认值移至一个 python 文件中

转载 作者:太空宇宙 更新时间:2023-11-03 21:43:57 25 4
gpt4 key购买 nike

我有一个 python 文件,其中包含项目中所有其他类的所有默认值

# config.py
DEFAULT_WORKER_TYPE = 'A'
DEFAULT_METRIC_TYPE = 'euclid'
...

# worker.py
import config
class Worker:
def __init__(self, worker_type=config.DEFAULT_WORKER_TYPE):
pass

# metric.py
import config
class Metric:
def __init__(self, metric_type=config.DEFAULT_METRIC_TYPE):
pass

这工作正常,但我想使用 Enum 作为 worker_typemetric_type 而不是原始字符串以避免拼写错误

# config.py
from worker import WorkerType
from metric import MetricType

DEFAULT_WORKER_TYPE = WorkerType.A
DEFAULT_METRIC_TYPE = MetricType.EUCLID

# worker.py
from enum import Enum
import config

class WorkerType(Enum):
A = 'A'
B = 'B'

class Worker: # the same

# metric.py
from enum import Enum
import config

class MetricType(Enum):
EUCLID = 'euclid'
MANHATTAN = 'manhattan'

class Metric: # the same

现在,在我看来,后一个版本不是很有效,因为它具有某种循环导入,并且如果我的主程序仅使用一个文件(例如 worker.py),它仍然需要导入所有其他文件 (metric.py),因为 config.py 导入所有这些文件。

有没有更好的方法来实现这个目标?

我将所有默认值移至 config.py 的原因是我需要定期使用这些值进行实验。将所有内容放在一个地方可以帮助我不必记住要更改哪个文件。

最佳答案

IMO,您可以使用经典方法,即将每个类放入单个模块中。

worker_type.py中:

import enum

class WorkerType(enum.Enum):
A = 'A'
B = 'B'

metric_type.py中:

import enum

class MetricType(enum.Enum):
EUCLID = 'euclid'
MANHATTAN = 'manhattan'

然后你可以像这样定义你的配置文件:

import worker_type
import metric_type

DEFAULT_WORKER_TYPE = worker_type.WorkerType.A
DEFAULT_METRIC_TYPE = metric_type.MetricType.EUCLID

这样,您的 worker.py 保持不变:

import config

class Worker:
def __init__(self, worker_type=config.DEFAULT_WORKER_TYPE):
pass

关于python - 将所有默认值移至一个 python 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52638921/

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