Комментарии 14
user1 = ['Вася', 23, 'Чебоксары'];

Вот это прям печаль, новички же часто усваивают вот такими примерами из обучения.
Писать в переменную суперкласса — дурной тон.

А почему? Использование переменных на уровне класса это иногда вполне нормальный способ дать понять, что это это глобальная переменная/константа как то связанная (по задумке программиста) с этим классом. Всяко лучше чем просто глобальная переменная.


И иногда удобней чем Singleton класс и прочие способы (которых много в C++, например).
Хотя python… ни области видимости, ни… (классы убогие).
python явно не лучший пример для демонстрации OOП.


Или имеется в виду засада с "User.user_count -= 1" в многопоточном приложении?
что так писать — это делать закладку на "она себя странно ведет" при переходе на multithread модель программы?


Хотя я согласен. общий уровень статьи "Сравнение: классы против функций" ужасен.

Константа да, но в каких случаях нужна переменная в классе, особенно тем, что только начал программировать?
Константа да, но в каких случаях нужна переменная в классе

Вам действительно не приходилось пользоваться глобальными переменными?
Вообще и никогда?


Переменная в классе python, это некий аналог static member в C++, Java.
Если учесть отсутствие нормальной инкапсуляции (по доступу) в python, то это фактически "подсказка разработчику того, что эта глобальная переменная по задумке связана с этим классом"


(И да. Не надо мне рассказывать про "инкапсуляцию" в python путем добавления "_" "__" к имени переменной. Это типичная "заплата" по принципу "на и отвяжись".)


особенно тем, что только начал программировать?

Как работают "потроха" — это, на мой взгляд, основа с чего нужно начинать.
Иначе программирование превращается в "магию" и набор шаманских рецептов.


Существование глобальных переменных (и переменных класса), в частности, к этим базовым знаниям и относится.


Впрочем увы. Я все больше и больше вижу:


  • Магия "Spring Boot" и прочая магия.
  • Зачастую, ужасно корявые рецепты с stackoverflow, копируемые как есть.
  • Дурацкий споры насчет императивного и декларативного программирования. Как будто базовые принципы с 70-х годов поменялись и компьютеры стали императивными на уровне железа (как аналоговые компьютеры).
  • И т.п. и т.д.

Стоп. меня понесло…

Как работают «потроха» — это, на мой взгляд, основа с чего нужно начинать.
Иначе программирование превращается в «магию» и набор шаманских рецептов.


Не соглашусь. Если начать обучение с потрохов,
то новичок с очень высокой вероятностью ничего не поймет,
посчитает что это очень сложно и забьет на программирование.

Изучение потрохов станет интересно после получения хотя бы минимального опыта
Следовало бы сказать, что в ООП получается больше кода, но подход более абстрактный и используется в сложных системах.

Ну оочень спорное и без апелляционное заявление. По разному бывает. От конкретного разработчик азависит.

Иван, привет!

Я — тот самый автор статьи из Кода. Спасибо за подробный разбор и за полезную критику. Мы удалили ту статью и объяснили, почему мы это сделали: thecode.media/oop_battle

Сейчас мы работаем над новой версией этой статьи, и, если вы не против, возьмём часть примеров из вашего разбора. Как только появится новый материал — сразу скину ссылку на него в комментариях.
Добрый день. Ощущение что Вы совершенно не представляете возможности функций в JavaScrit. Для ознакомления и подхода к этому очень тяжелому для мозгов снаряду github.com/MostlyAdequate/mostly-adequate-guide-ru

Из моего опыта. Если человек новичок то однозначно классы. Если опытный, то эмоционально придет к программированию функциями.
Почему про ООП вообще рассказывали на примере языков с очень слабым и неполноценным ООП? Нужна статья на примере Java или C#.

К сожалению, большинство "групп для программистов" не ставят целью научить программировать грамотно и красиво, а делают упор на привлечение внимания. А причина, думаю, и так понятна

«В третьих, любой программист скажет, что счетчик в классе — плохой пример. С этим подходом код зависит от глобального состояния, и совершенно неясно, как им управлять. » — а как вы предлагаете реализовать подсчет элементов, например, односвязного списка?
Причем тут односвязный список? Оригинальная статья на начинающих. Пользователей, которые вам нужны, складываете в обычнй список или словарь по айди и получаете длину через len().
ну так а внутри len что? Не запрос ли того самого счетчика? Начинающим неплохо бы знать такие базовые вещи, тем более самостоятельно писать списки учат на многих курсах.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.