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

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

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

Итак, откуда эта конвенция?

 FogleBird03 июл. 2009 г., 22:21
Где это "это" родом из?
 khachik23 дек. 2011 г., 20:49
Так какGuido решил использовать `self '...
 balpha♦03 июл. 2009 г., 18:12
Вы можете использовать & quot; this & quot; вместо "себя" столько, сколько вы хотите. Однако это может сбить с толку некоторые подсветки синтаксиса и инструменты проверки кода. Использование & quot; self & quot; это просто соглашение.
 quant_dev04 июл. 2009 г., 01:49
Так что, когда они злоупотребляют «собой», это самообман.
 Dietrich Epp23 дек. 2011 г., 20:47
С не имеет его вообще. JavaScript и PHP новее, чем Python ... так почему они не используют & quot; self & quot; вместо "этого"?

Ответы на вопрос(8)

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

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

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

Instead, one simply defines a function whose first argument corresponds to the instance, which by convention is named "self." For example:

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

This approach resembles something I had seen in Modula-3, which had already provided me with the syntax for import and exception handling.

Это такой же хороший выбор, как и любой другой. Вы можете спросить, почему C ++, Java и C # выбрали & quot; this & quot; так же легко.

 e-satis03 июл. 2009 г., 18:21
Извините, приятель, но на самом деле вы просто повторяете то, что я сказал в вопросе: python использует self, это соглашение. Вопрос в том, почему.
 e-satis03 июл. 2009 г., 19:52
Не перешел по ссылке. Виноват.
 03 июл. 2009 г., 18:26
Цитаты и ссылки объясняют мотивацию создателя Python. Было бы трудно получить лучшее "почему" чем это. Даффимо не повторяет ваш вопрос - это Гвидо.
 04 февр. 2015 г., 09:39
«почему C ++, Java и C # выбрали« это »; & Quot; - & GT; C # выбрал «это» потому что это происходит от Java. Ява выбрала «это» потому что это происходит от C ++. C ++ выбрал «это» потому что ... я не знаю :-)
 03 июл. 2009 г., 18:26
"... то, что я видел в Модуле-3 ..." - он получил больше документации, чем "Smalltalk, потому что я так сказал". Я верю, что "я" В истории это БДФЛ Гвидо.
Решение Вопроса

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

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

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

 03 июл. 2009 г., 19:44
Object Pascal (как ранние версии Apple, так и более поздние версии Borland, включая Delphi) также сочетались с «self».
 26 авг. 2009 г., 15:41
Не забывать себя, язык :)
 14 мая 2011 г., 19:53
@ Карл: Спасибо, не знал этого. Согласна с вами по поводу моего несколько запутанного последнего предложения.
 14 мая 2011 г., 08:42
Отличный ответ, за исключением того, что мы говорим о Java как одно и то же знакомство с Си и Си ++. Большинство людей делают ООП на С, например, сgobject использованиеself специально, чтобы избежать зарезервированных конфликтов ключевых слов, если их код когда-либо включен в проект C ++.
 04 июл. 2009 г., 01:49
Smalltalk и Objective-C оба используют метафору объектов, отправляющих сообщения друг другу, так что & quot; self & quot; просто указывает, что объект отправляет сообщение самому себе. (Мне всегда казалось более естественным использовать «я» вместо «это».)

self, Ты можешь использоватьthis вместо этого, если вы хотели:

Вот пример:

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

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

Often, the first argument of a method is called self. This is nothing more than a convention: the name self has absolutely no special meaning to Python. Note, however, that by not following the convention your code may be less readable to other Python programmers, and it is also conceivable that a class browser program might be written that relies upon such a convention.

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

 23 дек. 2011 г., 20:52
Это был не вопрос.
 23 дек. 2011 г., 21:10
Спасибо @jterrace, я не знал, что я могу использоватьthis в питоне тоже. Также ваше описание является разумным.
 24 дек. 2011 г., 00:34
Объедините этот ответ с предыдущим, в значительной степени идентичным вопросом - вы можете быстро его повторить.

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

the Modula-3 final report was being written there at about the same time. What I learned there showed up in Python's exception handling, modules, and the fact that methods explicitly contain “self” in their parameter list.

- Гвидо,Linux Journal Интервью Гвидо ван Россум

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

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

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

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

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

 24 дек. 2011 г., 00:34
Объедините этот ответ с предыдущим, в значительной степени идентичным вопросом - вы можете быстро его повторить.

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

 25 нояб. 2016 г., 06:54
Не уверен, почему этот ответ имеет 18 голосов. Какие-то конкретные причины? Я что-то здесь упускаю?

Python следует по стопам Smalltalk в аспекте - self используется и в Smalltalk. Я думаю,real вопрос должен быть «почему Бьярне решил использоватьthis в C ++ '...

 23 дек. 2011 г., 21:11
Это ... ответ.
 24 дек. 2011 г., 00:34
Объедините этот ответ с предыдущим, в значительной степени идентичным вопросом - вы можете быстро его повторить.

Ваш ответ на вопрос