我正尝试在我的项目中使用like工具,并且希望使用类函数的装饰器。
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'这是有意的吗?我应该将配置从外部传递给类吗?(例如,通过在主函数上使用修饰符并将配置作为参数传递给初始化程序,这是可行的)
还是在用错误的方式使用装饰师?如果是有意的话,是否有设计上的理由不想这样做呢?
通过将配置传递给主函数,我已经检查了是否正确地使用了装饰器,这是可行的。
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()这给了我预期的结果。
发布于 2022-03-31 11:52:54
@hydra.main()不适合此用例。它被设计成只在应用程序中使用一次,它有许多副作用(改变工作目录、配置日志等等)。
使用合成API代替。
https://stackoverflow.com/questions/71690759
复制相似问题