Reputation: 83755
So I have a really long chain of methods, something similar to:
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
It looks quite ugly. Is there some way to put each method on a separate line? Like:
return self.append_command("ffasfgas")
.append_command("fvasgvsd")
.append_command("hsdhsdhsd")
#etc
Upvotes: 3
Views: 189
Reputation: 157484
You can use backslash line continuation:
return self.append_command("ffasfgas") \
.append_command("fvasgvsd") \
.append_command("hsdhsdhsd")
or parentheses:
return (self.append_command("ffasfgas")
.append_command("fvasgvsd")
.append_command("hsdhsdhsd"))
But the most Pythonic way to do this would be to abstract the problem into a single function call:
return self.append_commands("ffasfgas",
"fvasgvsd",
"hsdhsdhsd")
Using reduce
is another option, but not particularly elegant:
return reduce(MyClass.append_command, ["ffasfgas",
"fvasgvsd",
"hsdhsdhsd"], self)
or even
return reduce(operator.methodcaller('append_command'),
["ffasfgas",
"fvasgvsd",
"hsdhsdhsd"], self)
Upvotes: 12
Reputation: 64348
You can do this:
return self.append_command("ffasfgas") \
.append_command("fvasgvsd") \
.append_command("hsdhsdhsd")
# etc
Upvotes: 2
Reputation: 799510
Either escape the newlines or parenthesize the expression.
foo \
.bar \
.baz
(foo
.bar
.baz)
Upvotes: 2