Найти тему
Deep Software Engeneering

Почему в Python метод sort() не возвращает self

Для начала о том, зачем вообще нужна конструкция return self. Обычно её используют, чтобы сделать возможным так называемый chaining, то есть код вида my_object.method().another_method().do_something(). Но, как мы видим из заголовка статьи, в стандартной библиотеке Python это не используется. Точнее, используется, но не всегда.

Для меня этот факт выглядит вполне естественным, хотя я никогда не думал о причинах. А вот тех, кто больше привык с другим языкам программирования, это подбешивает.

И все же, почему в Python разрешено делать line = line.strip().lower(), а line.reverse().sort() нельзя?

Оказалось у Гвидо есть письмо на этот счет: мутирующие методы должны возвращать None. Тогда код выше будет выглядеть как
line.reverse()
line.sort()

Это явно дает понять что методы мутирующие. А my_object.method().another_method().do_something() возможно только в том случае, если методы возвращают копию или новые объекты.

Стандартная библиотека Python придерживается такого соглашения, и мы тоже должны.