assert not 'default' in kwargs.keys() super().__init__(*args, default=_special_value, **kwargs) def serialize(self, x): if x == _special_value: return super().serialize(None) else: return super().serialize(x) def parse(self, x): x = super().parse(x) if x is None: return _special_value else: return x class TaskOnKart2(gokart.TaskOnKart): def to_str_params(self, only_significant=False, only_public=False): str_params = super().to_str_params() for param_name, param_value in self.param_kwargs.items(): if param_value == _special_value: del str_params[param_name] return str_params
a str->str hash. """ params_str = {} params = dict(self.get_params()) for param_name, param_value in self.param_kwargs.items(): if param_value is None: continue if (((not only_significant) or params[param_name].significant) and ((not only_public) or params[param_name].visibility == ParameterVisibility.PUBLIC) and params[param_name].visibility != ParameterVisibility.PRIVATE): params_str[param_name] = params[param_name].serialize(param_value) return params_str とりあえず行ける。 • luigi.Taskに特定のParameterの機能入れるのか • 意図的にNoneを使いたいParameterでも ◦ isinstance(params[param_name])とる? それこそ密結合
assert not 'default' in kwargs.keys() super().__init__(*args, default=_special_value, **kwargs) def serialize(self, x): if x == _special_value: return super().serialize(None) else: return super().serialize(x) def parse(self, x): x = super().parse(x) if x is None: return _special_value else: return x class TaskOnKart2(gokart.TaskOnKart): def to_str_params(self, only_significant=False, only_public=False): str_params = super().to_str_params() for param_name, param_value in self.param_kwargs.items(): if param_value == _special_value: del str_params[param_name] return str_params • luigi.Taskに特定のParameterの機能入れるのか ->to_str_paramsがkey->str表現のdictを返してくれるので、 後付けでdelで対応すればgokartレイヤ にとってこれる • 意図的にNoneを使いたいParameterでも -> Noneではなくオブジェクト ID比較 シリアライズ時は空文字になるので、マルチプロセスでも大丈夫なはず