LINUX.ORG.RU

История изменений

Исправление mashina, (текущая версия) :

whatever.join

Не читал ваш всю вашу увлекательную дискуссию на счёт правильного расположения join'а, мб что скажу ниже уже писали.

join() должен быть у строкового объекта по следующим причинам:

1. Соблюдение типизации и предсказуемость результата. Нельзя склеивать гетерогенный набор объектов (~объекты разных типов), т.е. не понятно что должно быть в таком случае на выходе. join(), как метод у экземпляра строки или класса (~ статический метод), проверяет чтобы было всё как нужно.

2. Особенности реализации. Какие-то объекты можно склеивать очень эффективно, какие-то нет. join(), как часть str, знает как можно эффективно это сделать. Для питона это особенно актуально, т.к. строки немутабельны.

3. join() не имеет общей семантики и общего смысла среди всех одноимённых операций и для большей части объектов такой операции вообще не существует. Потому логичнее реализовывать его как метод экземпляра или статический метод класса с описанием чего оно делает.

upd: А семантика whatever.join() называется reduce()

Исходная версия mashina, :

whatever.join

Не читал ваш всю вашу увлекательную дискуссию на счёт правильного расположения join'а, мб что скажу ниже уже писали.

join() должен быть у строкового объекта по следующим причинам:

1. Соблюдение типизации и предсказуемость результата. Нельзя склеивать гетерогенный набор объектов (~объекты разных типов), т.е. не понятно что должно быть в таком случае на выходе. join(), как метод у экземпляра строки или класса (~ статический метод), проверяет чтобы было всё как нужно.

2. Особенности реализации. Какие-то объекты можно склеивать очень эффективно, какие-то нет. join(), как часть str, знает как можно эффективно это сделать. Для питона это особенно актуально, т.к. строки немутабельны.

3. join() не имеет общей семантики и общего смысла среди всех одноимённых операций и для большей части объектов такой операции вообще не существует. Потому логичнее реализовывать его как метод экземпляра или статический метод класса с описанием чего оно делает.