Почему питонисты называют текущую ссылку "я", а не "this"?

Python - это язык, который я знаю больше всего, и, как ни странно, я до сих пор не знаю, почему я набираю "я", а не "this", как в Java или PHP.

Я знаю, что Python старше Java, но я не могу понять, откуда это взялось. Тем более, что вы можете использовать любое имя вместо "self": ​​программа будет работать нормально.

Итак, откуда это соглашение?

Ответ 1

Smalltalk-80, выпущенный Xerox в 1980 году, использовал self. Objective-C (начало 1980-х годов) слои Smalltalk имеют функции над C, поэтому он также использует self. Modula-3 (1988), Python (конец 1980-х) и Ruby (середина 1990-х годов) также следуют этой традиции.

С++, также начиная с начала 1980-х годов, выбрал this вместо self. Поскольку Java был разработан для разработчиков C/С++, он также использует this.

Smalltalk использует метафору объектов, отправляющих сообщения друг другу, поэтому "self" просто указывает, что объект отправляет сообщение самому себе.

Ответ 2

Проверьте историю Python для пользовательских классов:

Вместо этого просто определяется функция, первый аргумент которой соответствует экземпляру, который по соглашению называется "я". Например:

def spam(self,y):
    print self.x, y

Этот подход похож на то, что я видел в Модуле-3, уже предоставил мне синтаксис для импорта и обработки исключений.

Это выбор, как любой другой. Вы можете спросить, почему С++, Java и С# выбрали "this" так же легко.

Ответ 3

Smalltalk, который, прежде всего, предшествует Java.

Ответ 4

Что касается python, нет ничего особенного в self. Вы можете использовать this, если хотите:

Вот пример:

>>> class A(object):
...    def __init__(this):
...       this.x = 3
... 
>>> a = A()
>>> a.x
3

Хотя вы могли бы назвать его как хотите, self - это соглашение для первого аргумента функции класса. Отметьте параграф 5 раздела 9.4 в документации на python, в которой говорится:

Часто первый аргумент метода называется self. Это ничего более чем конвенция: имя "я" абсолютно не имеет специального что означает Python. Обратите внимание, однако, что, не соблюдая конвенцию ваш код может быть менее читаемым для других программистов на Python, и это также можно предположить, что программа браузера классов может быть написана так: опирается на такое соглашение.

Что касается соглашения, он начинался в Smalltalk, но также использовался в Object Pascal, Python, Ruby и Objective-C. Этот ответ имеет большое объяснение.

Ответ 5

Python следует за шагами Smalltalk в аспекте - сам также используется в Smalltalk. Я предполагаю, что реальный вопрос должен быть "почему Бьярн решил использовать this в С++"...

Ответ 6

Первичным источником вдохновения была Модула-3, которую Гвидо представил в DEC:

окончательный отчет Modula-3 написанных там примерно в то же время. То, что я узнал, появилось в Обработка исключений Python, модули, и тот факт, что методы явно содержат "self" в своем параметре список.

- Guido, Интервью с Linux Journal Guido van Rossum

Ответ 7

Я думаю, что, поскольку он явно объявил, что более разумно видеть фактический аргумент, называемый "я", а не "this". С грамматической точки зрения, по крайней мере, "я" не зависит от контекста, как "this".

Я не знаю, сделал ли я себя достаточно ясно, но в любом случае это просто субъективная оценка.

Ответ 8

self не является ключевым словом (*).

self представляет по соглашению адрес текущего объекта

Вы можете получить более подробную информацию о self здесь.

Почему бы не this? хорошо это соглашение для имени. Вы можете использовать this для своего кода, если вам это нравится.


(*) Этот ответ был перенесен и объединен здесь из вопроса, задающего why 'self' instead of 'this' keyword. Поскольку разъяснение в этой первой строке может быть полезно для других, я держу его здесь.