Почему питонисты называют текущую ссылку "я", а не "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
. Поскольку разъяснение в этой первой строке может быть полезно для других, я держу его здесь.