Python中方法链接的更好方式?

Ric*_*nop 3 python

所以我有一个很长的方法链,类似于:

return self.append_command("fbghasjfa").append_command(input_file_part).append_command(output_video_codec_part).append_command(output_resolution_part).append_command(output_video_bitrate_part).append_command(strict_part).append_command(output_audio_codec_part).append_command(output_number_of_audio_channels_part).append_command(output_audio_bitrate_part).append_command(output_file_part).__finalized
Run Code Online (Sandbox Code Playgroud)

它看起来很难看.有没有办法将每个方法放在一个单独的行上?喜欢:

return self.append_command("ffasfgas")
.append_command("fvasgvsd")
.append_command("hsdhsdhsd")
#etc
Run Code Online (Sandbox Code Playgroud)

eca*_*mur 12

您可以使用反斜杠行继续:

return self.append_command("ffasfgas") \
    .append_command("fvasgvsd") \
    .append_command("hsdhsdhsd")
Run Code Online (Sandbox Code Playgroud)

或括号:

return (self.append_command("ffasfgas")
        .append_command("fvasgvsd")
        .append_command("hsdhsdhsd"))
Run Code Online (Sandbox Code Playgroud)

但最Pythonic的方法是将问题抽象为单个函数调用:

return self.append_commands("ffasfgas",
                            "fvasgvsd",
                            "hsdhsdhsd")
Run Code Online (Sandbox Code Playgroud)

使用reduce是另一种选择,但不是特别优雅:

return reduce(MyClass.append_command, ["ffasfgas",
                                       "fvasgvsd",
                                       "hsdhsdhsd"], self)
Run Code Online (Sandbox Code Playgroud)

甚至

return reduce(operator.methodcaller('append_command'),
              ["ffasfgas",
               "fvasgvsd",
               "hsdhsdhsd"], self)
Run Code Online (Sandbox Code Playgroud)