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)

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

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

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

так и всех подряд библиотек, т.ч стандартных

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

В питон3 многое выпилили, но только частично. И при этом есть ряд библиотек, которые используются в чуть ли не каждом проекте, можно было бы их в стандартную библиотеку включить.

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

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

Видимо потому, что не такое уж и УГ. А ваши взгляды понятны... Не понятно всетаки зачем вы как говорится «не можешь с%;ть не мучай жопу».

Лично мне Python нравится и я не сажусь за Perl с воплями «Аааа какое унылое гавно»....

Из ваших претензий вообще не вижу ни одного здравого пункта. Впрочем я понимаю ваше негодование...

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

Уж если обсуждаете что, то то ознакомтесь с матчастью, а то может вам еще и Линуса позвать чтоб он перед вами звездами тут чечетку станцевал?

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

я разглядывал модуль asyncio

между версиями 3.5 и 3.6 и 3.7 много много разницы, увы, это не только legacy.

тупо никто не хочет Сперва подумать, сдизайнить API, а Потом написать. нет - сразу в атаку - сразу писать

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

можно было бы их в стандартную библиотеку включить.

Вы конечно им это сообщили... (Если вы не отзоветесь, мы напишем в спортлото).

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

Видимо потому, что не такое уж и УГ

УГ УГ

выравнивание пробелами избавило от PEP8? нет! убавило проблем? нет, добавило!

GC, запускаемый периодически может выложить систему? может

и так всё

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

Не знаю проблем с выравниванием. С GC есть куча ЯП, тут и Java и модный GO и ниче так. Перл что без GC?

В общем у меня больше доверия Светлову чем вам....

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

Перл что без GC

у Perl нет GC как процесса работающего в произвольное время. мусор чистится на выходе из скоупа. у C++ так же

С GC есть куча ЯП

и все они (абсолютно) - ацтой как только GC начинает сам решать когда ему работать

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

Не знаю проблем с выравниванием.

мы их обсуждали.

для многих языков при наличии в них оператора eval можно сделать безопасный темплейтный язык. Например Perl-embedded шаблонизатор у mojolicious, есть Javascript embedded-шаблонизаторы итп.

Смысл в том что не изобретаешь на все случаи жизни конструкции: циклы там итп, а пользуешься тем же языком.

Получается гибкое и быстро работающее решение.

а у Python эта тема закрыта именно выравниванием.

да я знаю (обсуждали уже) про попытки создать python-embedded шаблонизатор. Ему потребовалось в синтаксис повводить ключевые слова, ограничивающие блок. Что не есть True.

PS: вот написал True, блжвд. все ключевые слова Python с маленькой буквы, а три слова с большой. Даже в простом стиль выдержать не могли.

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

Jinja2 вполне себе. вообще шаблонизатор не должен совпадать с ЯП (тут даже я считаю, что он избыточен).

Про True... Это уже извините хрень.

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

Jinja2 вполне себе

ацтой.

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

шаблонизатор не должен совпадать с ЯП

шаблонизатор работающий поверх ЯП обычно

  • очень быстрый. По двум причинам: парсер такого шаблонизатора очень простой (как правило ловит одну-две лексемы и всё), а eval оптимизирован
  • очень гибкий.
rsync ★★
() автор топика
Ответ на: комментарий от dem

если бы логика в шаблонах была не нужна, не придумывали бы шаблонные языки программирования. jinja была бы не нужна.

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

у Perl нет GC как процесса работающего в произвольное время.

У Python его тоже нет. Кстати, Perl уже научился чистить циклические ссылки?

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

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

И правильно пригорело. Даже похапешники к разумным практикам пришли, а питоноедам все по барабану, культура кодинга в районе плинтуса даже в базовых батарейках. И ладно это компенсировалось бы бы каким-то удобным API, но нет, в этом плане тоже ахтунг. Кстати, сабжевый пример это такие потуги на eDSL, но лучше бы они следовали собственным мантрам.

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

У Python его тоже нет

у python есть: в доках написано что достижение счетчиком нуля не означает удаление скаляра.

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

поэтому отложенный GC - есть проявление сил зла в чистом виде

Perl уже научился чистить циклические ссылки?

Python их тоже не всякие умеет. а раз не всякие, то программировать надо исходя из того что в случае циклов надо применять инструменты: weakref почти такой же как в Perl. Разве что менее удобный, но то как всегда.

зачем секс с каллбеком в weakref, может кто объяснить?

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

уже научился чистить циклические ссылки?

алгоритм чистки циклссылок - всегда многопроходный. Чем более сложные циклы ищем, тем более многопроходный.

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

у Perl нет GC как процесса работающего в произвольное время.

У Python его тоже нет

у python есть: в доках написано что достижение счетчиком нуля не означает удаление скаляра.

А «процесса работающего в произвольное время» нет. Это волшебство.

когда он таки решит удалять скаляры он может уложить систему

А еще он может удалить /home. Но не удаляет. И систему не укладывает.

уже научился чистить циклические ссылки?

алгоритм чистки циклссылок - всегда многопроходный. Чем более сложные циклы ищем, тем более многопроходный.

Так научился или нет?

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

Хоть кто такой Гвидо Ван Россум знаем?

А у него есть что почитать, кроме бугурта при обсуждении новых фич в питоне?

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

А «процесса работающего в произвольное время» нет. Это волшебство.

и что это меняет?

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

а то что выделенный процесс не выделен в выделенный - вообще ничего не меняет.

Так научился или нет?

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

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

eval

АААААА. Лечите его.... Ничего что даже Nunjucks компилируется?

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

А «процесса работающего в произвольное время» нет. Это волшебство.

и что это меняет?

Это делает ложным твое утверждение «у python есть процесс GC работающий в произвольное время».

Так научился или нет?

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

Значит, не научился.

если бы показали язык который научился. но такого языка нет

Ты реально дремучий. Такие языки есть. Смотри на Python - он один из них.

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

С ацтойным синтаксисом выравниваемым пробелами

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

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

GC может начаться в произвольное время - о чем написано в доке

В какой версии Python?

Давай так. Напиши интерпретатор такой как тебе нравится. Делаю ставки:

1) Что вероятнее всего ты его не напишешь.

2) Ты его напишешь, но он обосрется.

3) 20млн.р. будут мелочи. Ты станешь известен и твои интерпретатор купит гугл са хреллион долларов.

Уверен, что кроме как трындеть ты ничего не умеешь. Даже p1 не сделаешь.

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

Это делает ложным твое утверждение

не делает.

проблема тут не в наличии процесса, а в том что GC выполняется отложенно в произвольно выбранное время.

а то что процесс заменен псевдопроцессом - не устраняет проблему.

Ты реально дремучий. Такие языки есть. Смотри на Python - он один из них.

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

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

Давай так. Напиши интерпретатор такой как тебе нравится

интерпретатор языка с кривой семантикой? с идиотским дизайном? зачем мне?

а идеальный язык вполне себе уже написан - Perl

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

Ну да.

да. Если бы Python умел бы удалять ЛЮБЫЕ циклы, то объясни мне для чего бы понадобился std-модуль weakref?

Python, разработчиков которого никогда не парила обратная совместимость не только в мажорных, но и в минорных версиях.

Почему даже в dev-ветке поддерживает weakref?

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

а идеальный язык вполне себе уже написан - Perl

Исусе. Продолжай, божий свет почти нашел на меня.

Цикл лично я удаляю дак - выделяю его в редакторе и жму del.

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

Там же написано в самом начале

A primary use for weak references is to implement caches or mappings holding large objects, where it’s desired that a large object not be kept alive solely because it appears in a cache or mapping.

For example, if you have a number of large binary image objects, you may wish to associate a name with each. If you used a Python dictionary to map names to images, or images to names, the image objects would remain alive just because they appeared as values or keys in the dictionaries

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

на стековерфлоу дохрелион вопросов от людей «почему не вызван мой деструктор» в той или иной форме.

вот первая ссылка в гугле

https://stackoverflow.com/questions/6104535/i-dont-understand-this-python-del...

деструктор d2 так и остался невызванным. расскажите мне про удаление циклов

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

напиши тест демонстрирующий хотя бы удаление простого цикла.

сможешь?

Демонстрирующий кому - тебе? Не думаю. А вообще - да, смогу:

$ cat a.py 

import gc

class C:
  def __init__(self, title):
    self.title = title
    self.other = None
  def __repr__(self):
    return self.title


def foo():
  c1 = C("cycle-gc-test-1")
  c2 = C("cycle-gc-test-2")
  c1.other = c2
  c2.other = c1

def lst():
  for o in gc.get_objects():
    if repr(o).startswith("cycle-gc-test-"):
      print "x"

foo()
lst()

print "Collecting"
gc.collect()
lst()
$ python a.py 
x
x
Collecting
$

А почему ты не можешь написать такой тест... потому что матчасть не учил.

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

да. Если бы Python умел бы удалять ЛЮБЫЕ циклы

Ограничения на удаляемые циклы описаны в документации, которую ты не читал.

то объясни мне для чего бы понадобился std-модуль weakref?

https://docs.python.org/2/library/weakref.html

«A primary use for weak references is to implement caches or mappings holding large objects, where it’s desired that a large object not be kept alive solely because it appears in a cache or mapping».

Следующие чтения документации будут платными.

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

Ограничения на удаляемые циклы описаны в документации, которую ты не читал.

прежде чем вещЯть с апломбом хорошо прочитать что вещаешь.

давай теперь определяйся:

  • или Python умеет удалять любые циклы
  • или в доке, «которую я не читал» описаны ограничения на удаление циклов
rsync ★★
() автор топика
Ответ на: комментарий от tailgunner

Следующие чтения документации будут платными.

вот с кем ни начнешь спорить: сперва строит из себя суперного кул-мега-хацкера.

потом начинает хныкать и просить денег.

я по четвергам и пятницам не подаю

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

прежде чем вещЯть с апломбом хорошо прочитать что вещаешь.

Не переживая, я прочитал.

давай теперь определяйся:

или Python умеет удалять любые циклы

Определись, где я сказал, что циклы могут быть любыми.

или в доке, «которую я не читал» описаны ограничения на удаление циклов

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

я по четвергам и пятницам не подаю

А я подаю. Бери, пригодится.

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

Определись, где я сказал, что циклы могут быть любыми.

я сказал что нет языка который научился любые циклы удалять

ты мне ринулся возражать «открой для себя Python»

если бы показали язык который научился. но такого языка нет

Ты реально дремучий. Такие языки есть. Смотри на Python - он один из них.

а теперь завертелся ужом

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

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

если у Python имеются ограничения «описанные в доке, которую я не читал» на удаление циклов, то weakref для них и предназначен.

агитация и пропаганда на тему каких-то мутных кешей - на нормальных людей не действует.

если кеши настолько мутные что требуют weakref, то надо просто уволить того кто их писал и нанять другого :)

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

Определись, где я сказал, что циклы могут быть любыми.

я сказал что нет языка который научился любые циклы удалять

Т.е. я этого не говорил. Прекрасно.

а теперь завертелся ужом

Я так понимаю, что по тесту удаления циклических ссылок и weakref вопросов нет? Вот видишь, как хорошо, что я подаю по четвергам. Ждем пятницы.

если у Python имеются ограничения «описанные в доке, которую я не читал» на удаление циклов, то weakref для них и предназначен.

WeakRef был бы в Python даже в случае, если бы ограничений на удаляемые циклы не было - как он есть в Java. Для чего он предназначен - см. выше.

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