Задать вопрос
@Djus1

Зачем нужны class в Python?

У меня есть чувство как будто я что-то не понимаю и туплю.

Не могу понять, зачем мне в коде нужны классы, я и так могу вызывать функции, зачем мне оборачивать их в класс? Лишний раз писать название класса перед функцией не хочется, ведь не пойму зачем.

Вот пример кода:
class ...
    def ...
    def ...
    def ...


Зачем тут нужен класс? Я гуглил, вылазит ООП, с которым всё становится только сложнее.

Не могли бы вы простым языком объяснить, где я должен использовать классы и с какой целью?

Желательно с примером :)
  • Вопрос задан
  • 2327 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 7
NeiroNx
@NeiroNx
Программист
Класс это унифицированная единица кода, объединяющая в себе все все зависимые функции и их переменные.
Как набор инструментов - это удобно - все что нужно на своих местах, не рассыпано где попало. Например кейс с шуруповертом, там зарядка, дополнительные аккумуляторы - так вот в коде также должен быть порядок. Например если у вас только 2 отвертки - крестовая и плоская - вам для них кейс не нужен, так и в коде с 2 функциями - не нужен класс для этого.
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
Я гуглил, вылазит ООП, с которым всё становится только сложнее.

сам спросил - сам ответил ))

ну давай погуглим зачем нужен ООП

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


https://habr.com/ru/articles/148015/

короче - для скриптов на одно-два действия классы нафиг не нужны, даже вредны - больше кода

но на более менее маленьком, но уже проекте с кучей файлов - ты взвоешь

впрочем, есть Go который ООП не любит ))) но при этом насыщен структурами оооочень по коду на классы похожими - хотя это, конечно, далеко не одно и то же
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Если у тебя функция не зависит ни от чего другого, и живет сама по себе - она и должна быть свободно-стоящей функцией.

А классы нужны для случаев, когда у тебя есть набор данных (состояние) и поведение, относящиеся к одной сущности.
Наглядный пример: файл. У него есть состояние - скрытые данные, например, дескриптор файла, правила чтения/записи, и т.п. вещи. И у него есть поведение - операции чтения, операции записи, закрытия и т.п.
Если эти операции оформить как функции, то им придётся передавать всё состояние файла явно, через параметры. А значит, программисту, который будет работать с файлом, придётся быть в курсе, как файл устроен внутри. Ему будет сложнее писать программу.
Если же мы обернём файл в объект, ситуация меняется. Теперь это состояние оказывается скрыто внутри объекта. Программисту достаточно иметь в своём распоряжении объект (экземпляр класса), и знать его "видимые снаружи" операции и свойства, а от внутреннего устройства он может абстрагироваться и вообще о нём не думать. Это здорово упрощает жизнь.
Ответ написан
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Вы очень даже правы, часто классы мешают, чем помогают.
И на питоне можно писать без классов. Но можно и в стиле ООП, с классами.

В классы удобно прятать локальные переменные и функции, их обрабатывающие, чтобы они не мешались в глобальном пространстве кода.

Но не всегда такой подход оправдан. Куча языков и фреймворков сознательно уходит от такого подхода в современном мире. И обычно это связано с введением в них функциональных механизмов.

Как примеры функционального подхода:
- язык clojure - классов фактически нет, есть функции и данные, причем данные - иммутабельные.
- язык java - введением функциональшины () и datа-классов (фактически набор данных)
- фреймворк reactjs с его хуками
- куча фреймворков для java (sparkjava и прочие)
- фреймворк flask для python, ну и туда же aiohttp
- язык javascript

Ну и сам python позволяет писать в полностью функциональном стиле!
Используйте аннотации, asynio и функциональные элементы языка.

А я рекомендую присмотреться и к clojure.
Ответ написан
@Wan-Derer
Зобанели на Хабре, волки́ ;((
Классы позволяют описать объекты реального мира, а также разделить (классифицировать) одинаковые функции разных объектов, которые выполняются по-разному.
Допустим, ты создаёшь зоопарк. Там есть разные животные. Для любого животного характерны одинаковые по названию функции ("есть", "говорить", "перемещаться" и пр.), но выполняемые по-разному. Поэтому для разных животных ты получишь разный результат выполнения функций с одинаковыми именами:
frog.speak()     # "Ква-ква!"
horse.speak()    # "И-го-го!"
Ответ написан
Комментировать
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
Представь, что у тебя есть проблема и по ней много разнообразных данных.
Некоторые из этих данных однотипны, и обычно мы их как-то записываем единообразно. Например, некоторые типы удобно записать в таблицы. Сейчас мы часто записываем такие данные в таблицы типа excel.

Так вот.
  • Таблица со своим собственным именем - это тип данных.
  • Заголовок таблицы это класс, описывающий этот тип данных.
  • Строки таблицы с данными - это экземпляры класса.
  • Колонки таблицы это атрибуты.
  • Формулы, протянутые на колонки таблицы, это методы класса.


Это очень-очень грубо.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Классы удобны когда все функции объединяются общим контекстом. Например подключение к БД.
Или класс - клиентское окно где можно рисовать графику. Можно кодить и без классов на голых
функциях (такое тоже практируется) но тебе придется одним параметром всегда передавать
контекст.


Использование классов (объектов) для хранения состояния - это признак зрелости исходного кода.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы