在 类 中使用 Hydra 配置

Using Hydra Configuration inside Classes

我正在尝试在我的项目中使用 hydra 工具,并希望将装饰器用于 class 函数

import hydra
from hydra.core.config_store import ConfigStore

from src.config import RecordingConfig

cs = ConfigStore.instance()
cs.store(name="recording_config", node=RecordingConfig)

class HydraClassTest:
    @hydra.main(config_path="../src/conf/", config_name="conf")
    def __init__(self, conf: RecordingConfig):
        print(conf)

def main():
    HydraClassTest()

if __name__ == "__main__":
    main()

但是我得到了错误

TypeError: __init__() missing 1 required positional argument: 'conf'

这是有意的吗?我应该将配置从外部传递给 class 吗? (例如,通过在主函数上使用装饰器并将配置作为参数传递给初始化器,这是可行的)
或者以错误的方式使用装饰器? 如果是有意的,是否有一些设计原因为什么人们不想那样做?

我已经通过将配置传递给 main 函数来检查我是否正确使用了装饰器,这很有效。

import hydra
from hydra.core.config_store import ConfigStore

from src.config import RecordingConfig

cs = ConfigStore.instance()
cs.store(name="recording_config", node=RecordingConfig)

class HydraClassTest:
    def __init__(self, conf: RecordingConfig):
        print(conf)

@hydra.main(config_path="../src/conf/", config_name="conf")
def main(conf: RecordingConfig):
    HydraClassTest(conf)

if __name__ == "__main__":
    main()

这给了我预期的结果。

@hydra.main() 不适用于此用例。它旨在在应用程序中使用一次,并且有很多副作用(更改工作目录、配置日志记录等)。

改用Compose API