Почему я только конвенция, а не настоящее ключевое слово Python?
Насколько я знаю, я – очень сильное соглашение, и это не действительно зарезервированное ключевое слово в Python. Java и C # имеют это ключевое слово. Мне действительно кажется странным, что они не сделали зарезервированное ключевое слово для него в Python. Есть ли причина в этом?
- Python raw_input, следующий за sys.stdin.read (), вызывает EOFError
- Удалить Python UserWarning
- Как добавить пользовательские параметры в строку запроса URL-адреса с помощью Python?
- Как проверить список, содержащий NaN
- В Python объект () равен чему угодно, кроме самого себя?
- google app engine: Ошибка: HTTPError
- Вход Python никогда не равен целому числу
- Выполнить установленный пакет Python как скрипт?
- множественный импорт python для общего модуля
- Более короткий способ проверить истинность в выражении понимания списка 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.
Какая бы ни была заслуга или какая-либо другая эта философия, это приводит к более унифицированному понятию функций и методов.
- Удаление повторяющихся символов из строки
- Найдите и замените дубликаты в массиве, но замените каждый n-й экземпляр на другую строку
- python - эффективный способ проверки наличия части строки в списке
- Почему я не могу загрузить видео в Microsoft Azure API и получить правильный заголовок местоположения?
- Неверное неравенство и упорядочение фильтра приложений
- кросс-платформенное расщепление пути в python
- Создание списка списков с последовательными номерами
- Как применить monkeypatch к GAE?
- Я ожидаю «Правда», но получаю «Нет»
- Python: разбивать список на основе условия?
- Как подсчитать частоты слов в файле в python
- Обновить значение вложенного словаря различной глубины