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