LINUX.ORG.RU
ФорумTalks

ненависть: Python, где же ООП, ау?

 , , , ,


1

5

в прошлый раз когда я тут поразбирал тесты курильщика python мне тут несколько адептов хором рассказывали про ООП.

Практически дословная цитата:

Ты, идиот! ООП не знаешь!

Ок, ООП.

Смотрим популярный фреймворк, например flask.

Вот пример кода из его документации:

from flask import request
@app.route('/login', methods=['POST', 'GET'])
def login():
    error = None
    if request.method == 'POST':
        if valid_login(request.form['username'],
                       request.form['password']):
            return log_the_user_in(request.form['username'])
        else:
            error = 'Invalid username/password'
    # the code below is executed if the request method
    # was GET or the credentials were invalid
    return render_template('login.html', error=error)

В каком еще другом языке есть веб-фреймворк с подобным надругательством над ООП?

★★

Последнее исправление: leave (всего исправлений: 1)

Ответ на: комментарий от no-such-file

в Питоне len дефакто алиас для __len__

dem ★★
()
Ответ на: комментарий от MyTrooName

Мсье знает толк в извращениях. Я как на новую работу пришел увидел код:

a = 10 if 'z' not in h else h['z']

Пол часа сидел думал - ссыкотно было спросить это вообще законно?

dem ★★
()

В питоне, как и во многих других ЯП ООП не обязателен.

peregrine ★★★★★
()
Ответ на: комментарий от rsync

Только #!/usr/bin/env perl вызывает рвотный рефлекс, т.к. perl ЯП для наркоманов и сисадминов. Если ты не сисадмин, то у меня плохие новости...

peregrine ★★★★★
()
Ответ на: комментарий от Shadow

Да и из cpython его выпиливали, но поскольку это привело к замедлению однопоточного кода это отклонили.

pawnhearts ★★★★★
()
Ответ на: комментарий от Shadow

я не знаю, о каком массиве ты говоришь, но если h - словарь, то есть метод h.get('z', 10). и в 99% случаев h и a - крайне сомнительные идентификаторы. да и 'z' тоже подозрительно

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)

Чувак, ты хреновый пример подобрал. Фласк - днище. Вот тебе фреймворк с нормальным (условно) ООП - https://falconframework.org/

KernelPanic
()
Ответ на: комментарий от slaykovsky

А с чего бы ему быть в cpython?

Makarov also created a JIT called MJIT, which produces C code from the RTL instructions, and then compiles that C code onto native code with existing compilers.

Это хрень, а не jit имхо

pawnhearts ★★★★★
()
Ответ на: комментарий от pawnhearts

Обожаю комментарии специалистов написавших 10000 интерпретаторов и компиляторов для 100 языков.

dem ★★
()
Ответ на: комментарий от Deleted

Я так понял что то что объект request импортируется, а не передаётся во вью аргументом

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

bread
()
Ответ на: комментарий от tailgunner

в чем разница?

В том, что для рубина наиболее естественный подход это ОО-декомпозиция, а в питоне ООД это боль и унижение. Поэтому на питоне обычно наворачивают процедурные говна, наплевав на всякие паттерны и лучшие практики, а в рубине размазывают говна тонким слоем по дереву классов по заветам жуликов вроде Фаулера или банды четырех.

bread
()
Ответ на: комментарий от bread

Я использую сабж и request спрятан внутри разных классов. Что плохого в глобальной магической фигне, если она аккуратно используется, как вставки на ассемблере в бейсике?

Shadow ★★★★★
()

Когда после Java писал что-то на Python, то у меня тоже так пригорело. Где же явный Injection всех этих вещей? Ну же, надо же класс, надо же IoC, надо же все все обьявить, описать, сверху нахлобучить иначе это нельзя будет тестировать.

Оказалось тестировать можно. Просто можно и все, хоть ты и можешь обьяснить 100 причин почему нельзя. А на деле - все работает. Надо подождать этого осознания.

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от Shadow

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

bread
()
Ответ на: комментарий от vertexua

Когда я попробовал написать hello world на яве, у меня был шок от % не исполняемого кода - описание всего.

Shadow ★★★★★
()
Ответ на: комментарий от pawnhearts

Она будет лежать в своём thread, например. Т.е. когда я использую треды, я знаю, зачем и почему.

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

Не знаю ничего про flask, я о подходе вообще. Глобальные объекты, которые мутируют где-то в недрах фреймворка, чота идея не внушает. Еще и выглядит как колдунство.

bread
()
Ответ на: комментарий от pawnhearts

С помощью gnu bison.... Я эти интерпретаторы по утрам пишу по 5 штук... (такая фигня получается).

dem ★★
()
Ответ на: комментарий от Shadow

Когда я попробовал написать hello world на яве, у меня был шок от % не исполняемого кода - описание всего.

Зато разобраться что делает код легко, поэтому жаба божит в индустрии.

bread
()
Ответ на: комментарий от bread

писатель-фантаст пишет в жанре фентези-киберпанк

магия-шмагия + технологии + обряды и шаманство. Ну и ГГ - левел бох.

rsync ★★
() автор топика
Ответ на: комментарий от bread

Надо отделять страх свершившегося от страха того что может быть. В Python теоретически если что-то неявно, то теоретически это полно багов. СТрах нативного кода на C++ у программистов на управляемых языках имеет ту же природу. Мол идеальный код хранит тайный сегфолт или corruption памяти. Ещё нет, но вот вот будет ночью на продакшне.

Тут тоже самое. Обычно конкретная семантика и поведение намного проще и надёжнее чем глобальные переменные как асбтракная идея в абстрактной системе большой сложности

vertexua ★★★★★
()
Ответ на: комментарий от bread

Тоесть мы тут в треде про Python показываем какие мы умные, а кто такой Светлов не знаем? Хоть кто такой Гвидо Ван Россум знаем? А то как то грустно....

dem ★★
()
Ответ на: комментарий от dem

Гвидо-Ван-Россум - клинический чел, которому недосуг было посмотреть/подумать как. Зуд заставлял песать код.

Папа у Гвидо - толстый богатей, продавил поделие сынки в Гугл. из за этого весь мир мучается теперь.

так вообще часто бывает: папа Билли продавил кредитами чтоб Шиндовс предустанавливали на компы. теперь весь мир мучается. то же и с Гвидо. Папа продавил - мир мучается.

Мозахисты причем появляются — фанаты этой (и другой) гадости.

ну а Светлов - песатель сказочник, который за денежку продает участие в курсах «как стать богатым»

rsync ★★
() автор топика
Ответ на: комментарий от rsync

Папа у Гвидо - толстый богатей, продавил поделие сынки в Гугл

Что за бред.

ну а Светлов - песатель сказочник, который за денежку продает участие в курсах «как стать богатым»

Нет. Андрей Светлов - Python Core Developer с 2012.

Кроме того у него есть статьи критикующие Flask который написал кто? (я вот не буду говорить).

Всетаки перед тем, как орать - что все мудаки, один я д`Артаньян можно немножко матчасть изучить, а то как то стыдно становится за вас.

dem ★★
()
Ответ на: комментарий от Jopich1

Я должен весь его блог прочитать или что? На первой странице там реклама каких-то крусов по поднятию чсв.

Пусть приходит на лор и рассказывает нам почему некая глобальная переменная с реквестом это круто. Напоминает window.event из древних ie tbh smh

pawnhearts ★★★★★
()
Ответ на: комментарий от pawnhearts

рассказывает нам почему некая глобальная переменная с реквестом это круто

Давно так не ржал...

dem ★★
()
Ответ на: комментарий от dem

Что за бред.

есть другое объяснение почему Гугл взял это УГ на вооружение?

  • с ацтойным GC
  • с ацтойным синтаксисом (глобальный неймспейс стандартных идентификаторов захламлён: str, from, is, итп заняты. Даже id занято. Я вот думал почему на многих страницах в интернетах предпочитают делать _id, а оно вот оно как!)
  • С ацтойным синтаксисом выравниваемым пробелами: требование написать PEP8 это не отменило, но добавило массу геморроя, например невозможность делать python embedded
  • система именования модулей дебильная. Поэтому в питоне часты такие УГ как datetime.datetime.now(), foo.foo.bar()
  • с тупой традицией раз в версию менять API как самого языка (iteritems => items, print -> print()) так и всех подряд библиотек, т.ч стандартных

итп

кроме как блатом такое действие не объяснить

rsync ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.