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)
Ответ на: комментарий от rsync

то что делает код в примере несущественно

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

существенно КАК он это делает

"Существенно что он не соответствует какой-то парадигме"

еще раз: первую строку примера flask можете прокоментировать?

Какую, "from flask import request"? Это импорт объекта "request" из модуля "flask". Что тут комментировать?

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

Я кажется понял на что ты намекаешь. Ты хочешь чтобы оъект request передавался в функцию login:

def login(request):
    pass

Ну да, так естественно для ООП, только причëм тут Питон? Там так можно. В Django так и делается, кстати.

Deleted
()
Последнее исправление: pyroman (всего исправлений: 1)
Ответ на: комментарий от micronekodesu

Какую, «from flask import request»? Это импорт объекта «request» из модуля «flask». Что тут комментировать?

а что такое объект request по Вашему?

подсказка: весь пример представляет из себя запрограммированный http-сервер.

так что такое объект request?

rsync ★★
() автор топика
from flask.views import View

class ShowUsers(View):

    def dispatch_request(self):
        users = User.query.all()
        return render_template('users.html', objects=users)

app.add_url_rule('/users/', view_func=ShowUsers.as_view('show_users'))
Davidov ★★★★
()
Ответ на: комментарий от rsync

У тебя не ООП. Типичный Ооп начинается с объявления класса, интерфейса, геттера и сеттера.
Потом создаётся инстанс, который уже выполняет работу. А у тебя какой-то мерзкий жабоскрипт!
Более того, я бы так написал:


print "Content-type: text/html\n\n"
print << END;
<html><body>hello!</body></html>
END
exit;

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

так что такое объект request?

Я не совсем понимаю какого типа ответ ожидается. В "login" это объект - запрос, в импорте - класс\функция\модуль\etc (лень смотреть).

Или вопрос в том "так что такое объект"?

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

Это библиотечный класс. Над которым каждый издевается как умеет. Вон ниже более адекватное издевательство над библиотечным классом, с наследованием.
Почему ты хочешь запретить дёргать «функции» из библиотек напрямую, вне ООП? Фронтендеры так постоянно делают, и ещё гордятся, что это «мощь и гибкость»
Ну и в примере ещё есть декоратор, полностью убивающий читаемость, где какой объект и кто его инициализировал.

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

в данном примере вообще нет ООП. ни в каком виде. примеры, как работает ООП в фласке уже есть в треде.

пример конечно выглядит не очень с точки зрения python zen, (explicit is better then implicit), но в целом, ничего преступного я в нём не вижу

так может всё таки напишешь, что тебя так возмутило в приведённом примере или будешь воду в ступе молоть?

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

То что питоновские модули и синтаксис обращения к ним сделали таким же, как у объектов, это просто удобство языка

Не как у объектов, а модули — это фактически и есть объекты. И классы, кстати, тоже объекты.

oldstable
()

Можешь русским языком сформулировать свои претензии? Без эмоциональных взвизгов.

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

так может всё таки напишешь, что тебя так возмутило в приведённом примере или будешь воду в ступе молоть?

Я так понял что то что объект request импортируется, а не передаётся во вью аргументом, как делается в Джанге, например. Ну это действительно странно. Питон тут правда не причём.

Deleted
()
Последнее исправление: pyroman (всего исправлений: 1)
Ответ на: комментарий от oldstable

В питоне модуль - типа объект... Его модно использовать как объект-родитель. А можно использовать в процедурном стиле его часть.

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

Это невозможно, так как он не ставит целью использование python, а повизжать ему хочется.

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

Ну и в примере ещё есть декоратор, полностью убивающий читаемость, где какой объект и кто его инициализировал.

Я, кстати, так и не понял что это за зверь

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

когда я в прошлый раз обратил внимание … мне сказали «ты идиот, ООП не знаешь!»

а теперь я им пример того как над ООП грязно надругались, а они мне про какое-то функциональное программирование

А что тебе сказать, чтобы ты хоть толику той энергии, с которой срешься о тебе неизвестном, направил на его молчаливое освоение? Худший неосилятор - болтливые неосилятор. Возьми перерыв от срача на практику длиной хотя бы в годик - потом вернешься и мы тебя размажем, будь здоров, но уже предметно. Спорить с позицией, выкованной лишь в срачах, где ты просто упрямился и все равно ничего не воспринимал, откровенно лень.

t184256 ★★★★★
()

OOP это никак не касается, но сегодня был поставлен в ступор следующим кодом:

None == None is None
И тем что он возвращает True

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

В последствии понял, сначала воспринял это как

(None == None) is None

pilotys
()

Так никто и не говорил, что python - ООП-язык.

Python - это динамический процедурный язык с приколоченным сбоку ООП.

Если ты хочешь истинный ООП-динамический-язык, то тебе нужно в Ruby.

Кстати, в Ruby в нагрузку ты получишь:

1) батарейки в комплекте (истинно базовые классы, идущие в комплекте, таким как Time, File, Struct и т.д., а не отсутствие таковых в декларируемых «батарейках в комплекте» у питона)

2) стройную ООП-иерархию классов (а не наркоманскую смесь процедур и объектов в питоне)

3) нормальную иерархию больших тематических библиотек (а не зоопарк мелких разрозненных модулей на каждый чих, который придётся пачками тащить в свои пистоно-программы).

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

дык популярный фреймворк - и такие косяки с ООП.

Где в приведенном сниппете ООП?

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

про надругательство над ООП комментировать не будем?

Если ты страдаешь, то зачем ты издеваешься над собой? Используй PHP и будь счастлив.

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

Что за $c? Почему доллар, а не йена например?

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

Он Светлова не читал, но возмущается....

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

Почему ты хочешь запретить дёргать «функции» из библиотек напрямую, вне ООП?

Ему в .NET там до недавнего времени вообще функций небыло....

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

нормальную иерархию больших тематических библиотек

С каких пор фреймворки стали лучше?

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

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

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

Это сахар. Даже не сахар, это хренов сироп, от которого жопа слипается. Но некоторые за это любят фласк или там Click.

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

Объясни уже что именно тебя смущает. За весь тред так ничего внятного и не сказал, чего целку из себя строишь?

Неужто объект в связке с контекстом?

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

Python - это динамический процедурный язык с приколоченным сбоку ООП.

Если ты хочешь истинный ООП-динамический-язык, то тебе нужно в Ruby.

А конкретнее - в чем разница?

tailgunner ★★★★★
()

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

rsync ★★  Ламо не осилившее питон

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

отсутствие gil

Кстати, есть информация по быстродействию?

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

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

А конкретнее - в чем разница?

В питон возможны процедуры, типа: len(«vasya»)
а руби - невозможны, только методы объектов: «vasya».size

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

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

А конкретнее - в чем разница?

В питон возможны процедуры, типа: len(«vasya»)

Если критерий «истинности ООП» - это отсутствие свободных процедур, то это какой-то бесполезный критерий.

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

а руби - невозможны

Во-первых возможны. А во-вторых в питоне len, насколько я помню, «понимает» разные типы аргумента, т.е. это ООП (ad-hoc).

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.