在 类 中使用 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。
我正在尝试在我的项目中使用 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。