Почему я только конвенция, а не настоящее ключевое слово Python?

Насколько я знаю, я – очень сильное соглашение, и это не действительно зарезервированное ключевое слово в Python. Java и C # имеют это ключевое слово. Мне действительно кажется странным, что они не сделали зарезервированное ключевое слово для него в Python. Есть ли причина в этом?

3 Solutions collect form web for “Почему я только конвенция, а не настоящее ключевое слово Python?”

Гвидо ван Россум рассказал о том, почему явное я должен оставаться: http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html

Я считаю, что пост дает некоторое представление о дизайнерских решениях, касающихся явного «я».

Поскольку self является просто параметром функции, как и любой другой параметр. Например, следующий вызов:

 a = A ()
 ах ()

по существу, преобразуется в:

 a = A ()
 Ах (а)

Не делая self резервированное слово, получило удачный результат, а также для методов класса, вы можете переименовать первый параметр в нечто другое (обычно cls ). И, конечно же, для статических методов первый параметр не имеет отношения к экземпляру, на который он вызывается, например:

 класс A:
     def method (self):
         проходить

     @classmethod
     def class_method (cls):
         проходить

     @staticmethod
     def static_method ():
         проходить

 класс B (A):
     проходить

 b = B ()
 b.method () # self - b
 b.class_method () # cls - B
 b.static_method () # ни один параметр не прошел

Потому что метод – это просто функция, для которой первый параметр используется для передачи объекта. Вы можете написать такой метод:

 class Foo(object): pass def setx(self, x): self.x = x Foo.setx = setx foo = Foo() foo.setx(42) print foo.x # Prints 42. 

Какая бы ни была заслуга или какая-либо другая эта философия, это приводит к более унифицированному понятию функций и методов.

Interesting Posts

Панды, как применять несколько функций к кадру данных

wxPython – wxGrid – как определить, какой столбец перемещается, где

Нарезка массива numpy вдоль динамически заданной оси

Сортировка списка по заданному заказу

Как найти открытую рамку чтения в Python

python help >> модули дают ошибку сегментации – как исправить?

Ошибка Python: «ValueError: требуется больше, чем 1 значение для распаковки»

Python: попытка использования формы POST с использованием запросов

SQLAlchemy – сопоставление самореферентных отношений как одного для многих (декларативная форма)

Почему установки python.org OS X построены с помощью gcc-4.0?

SWIG-обернутый вектор векторов (C ++ to python) – как распознать внутренний вектор как прокси-объект?

Используя Python, как мне читать / записывать данные в памяти, как я бы с файлом?

ValueError: не удалось преобразовать строку в float: id

Python – настройка даты и времени в определенном часовом поясе (без конверсий по UTC)

Эффективная альтернатива "в"

Python - лучший язык программирования в мире.