首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类中使用Hydra配置

在类中使用Hydra配置
EN

Stack Overflow用户
提问于 2022-03-31 10:15:42
回答 1查看 900关注 0票数 0

我正尝试在我的项目中使用like工具,并且希望使用类函数的装饰器。

代码语言:javascript
复制
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()

但我明白错误

代码语言:javascript
复制
TypeError: __init__() missing 1 required positional argument: 'conf'

这是有意的吗?我应该将配置从外部传递给类吗?(例如,通过在主函数上使用修饰符并将配置作为参数传递给初始化程序,这是可行的)

还是在用错误的方式使用装饰师?如果是有意的话,是否有设计上的理由不想这样做呢?

通过将配置传递给主函数,我已经检查了是否正确地使用了装饰器,这是可行的。

代码语言:javascript
复制
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()

这给了我预期的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-31 11:52:54

@hydra.main()不适合此用例。它被设计成只在应用程序中使用一次,它有许多副作用(改变工作目录、配置日志等等)。

使用合成API代替。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71690759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档