在初始化时从其他参数创建 luigi 参数

fem*_*yte 4 python luigi

我有以下问题 - 我可以使用一个参数的值来定义另一个参数吗?这是我正在尝试做的事情的说明。假设我有一个如下所示的配置文件:

[MyTaskRunner]
logdir=/tmp/logs
numruns=2
Run Code Online (Sandbox Code Playgroud)

MyTaskRunner这样定义:

class MyTaskRunner(luigi.Task):
      logdir=luigi.Parameter(default=None)
      rundate=luigi.Parameter(default=today)
Run Code Online (Sandbox Code Playgroud)

其中logdir是从配置文件中获取的参数,rundate是运行时传入的参数。

现在,假设我想定义一个logpath_str像这样的新变量

       logpath_str="{}/{}".format(logdir, rundate)
Run Code Online (Sandbox Code Playgroud)

是否可以将其定义为参数?

解决方案是指定默认值,如下所示:

       logpath=luigi.Parameter(default=logpath_str)
Run Code Online (Sandbox Code Playgroud)

欢迎任何建议。

小智 5

直到类被初始化(在 期间__init__),参数值才会被解析,因此实现您正在寻找的行为的一个简单方法是自行实现__init__logpath在调用 super 后使用默认值进行初始化。

class MyTaskRunner(luigi.Task):
    logdir=luigi.Parameter(default=None)
    logpath=luigi.Parameter(default=None)
    rundate=luigi.Parameter(default=today)

    def __init__(self, *args, **kwargs):
        super(MyTaskRunner, self).__init__(*args, **kwargs)

        if self.logpath is None:
            self.logpath = "{}/{}".format(self.logdir, self.rundate)
Run Code Online (Sandbox Code Playgroud)