#python #fb-hydra #omegaconf
#питон #fb-гидра #омегаконф
Вопрос:
Учитывая следующие конфигурационные файлы:
# foo/bar.yaml _target_: ChildClass a: 0 b: 1
# config.yaml defaults: - foo: bar.yaml _target_: MainClass c: 2 d: ${foo.a} # this line doesn't work
Я хотел бы построить объект типа MainClass, который принимает объект типа ChildClass.
Один из аргументов ChildClass также используется в конструкторе MainClass.
Как я могу прочитать дочернее свойство a
с помощью интерполяции аргументов?
Ответ №1:
Ваша идея должна работать как есть. Пожалуйста, убедитесь, что у вас установлена версия Hydra gt;= 1.1, и попробуйте это сделать:
# foo/bar.yaml _target_: mod.ChildClass a: 0 b: 1
# config.yaml defaults: - foo: bar.yaml _target_: mod.MainClass c: 2 d: ${foo.a}
# mod.py class ChildClass: def __init__(self, a, b): print(f"Child {a=} {b=}") class MainClass: def __init__(self, c, d, foo): print(f"Child {c=} {d=} {foo=}")
# app.py import hydra from hydra.utils import instantiate from omegaconf import DictConfig, OmegaConf @hydra.main(config_path=".", config_name="config") def run(cfg: DictConfig): instantiate(cfg) if __name__ == "__main__": run()
$ python app.py Child a=0 b=1 Child c=2 d=0 foo=lt;mod.ChildClass object at 0x7f675436b130gt;