LINUX.ORG.RU

Написание виджетов на pyqt5 без ооп

 , , , ,


1

1

Доброго времени суток. Мне понадобилось написать виджет круглого прогрессбара. Как это можно сделать без ООП? Я понимаю что в qt всё на ооп завязано, но можно без всяких self, class? (Написать на пайтоне) Вы можете, спросить, почему я не юзаю ООП, я отвечу: «Я просто не смог разобраться в ооп, поэтому всячески его избегаю». В статьях из инета везде копипаста. А некторые просто не открываются.



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

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

В питоне … это существенно разные вещи, как и объект класса (Circle)/экземпляр класса (circle)

Я очень сильно далёк от питона, но что-то мне подсказывает что и то и другое ссылается на англ «instance». В чём разница в этом контексте?

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

Это общая проблема всех динамически типизированных языков

Это не проблема, питон выдаст ошибку при попытке такого вызова.

Кстати: ошибка в момент вызова, а не компиляции – это и есть проблема динамически типизированных языков.

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

Circle один, cirle-ов может быть сколько угодно.

Вызов Circle() делает очередной circle.

В плюсах Circle может быть параметром шаблона, в питоне его можно передавать в функции и хранить в переменных как обычный int например

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

Это бесспорно, но ровно те же проблемы могут возникнуть в плюсах если сделать дерево виртуальных классов а потом дернуть не тот метод у какого нить из потомков.

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

Есть нарочно творить дичь, то да. Штатно используя ООП – нет. Творящие дичь – ССЗБ. Причём если говорить про вызов не того метода не того подкласса, то дичь здесь может быть не только в некорректных кастах (e.g. даункасты в прикладном коде – это почти железный сигнал, что с автором кода следует расстаться), но и в нарушении LSP в самой иерархии (из-за которого и может возникнуть необходимость в даункастах – т.е. расставаться в этом случае надо с автором иерархии).

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

Почему сразу дичь? Интерфейс может быть так спроектирован что часть методов базового класса у потомков априори невалидны и кидают исключение. А дальше как рантайм повернется…

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

Вот это и есть нарушение LSP, т.е. дичь.

Интерфейс может быть так спроектирован что часть методов базового класса у потомков априори невалидны и кидают исключение.

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

А дальше как рантайм повернется…

А если LSP нарушен, т.е. метод «пописать» в подклассе отрабатывает как «покакать», то это извините не ООП, а говно собачье. Т.е. говнокод, некорректно использующий ООП-фичи языка. А потом появляются приколы про игры, в которых овечки стреляют из РПГ, потому что в чью-то светлую голову пришла мысль отнаследовать их от бойцов, лишь бы быстрее доделать.

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

Circle один, cirle-ов может быть сколько угодно.

Всё о чём я хотел бы попросить - это придерживаться общепринятой терминологии. Если мы говорим о какой-то форме RTTI / Reflection - более уместны были бы понятия «Metaclass / Instance of», а не «экземпляр / объект». Последнее конфьюзит даже меня после десятилетий в индустрии.

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

А если LSP нарушен, т.е. метод «пописать» в подклассе отрабатывает как «покакать», то это извините не ООП, а говно собачье.

Зашёл в общественный туалет, подошёл к писсуару, расстегнул ширинку – и обосрался! :))))

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

Мнэ… так в питоне это и есть общепринятая идеология. Более того, Circle не метакласс, это обычный класс.

Еще раз, в С++

class A{...};
  1. может делать экземплятры класса (инстансы)
  2. может быть параметром шаблона но не может хранится в переменной/передаваться в функции как параметр. Т.е. это не объект первого класса, он ограничен в своих правах. Нельзя написать вот так вот
T C = A;
...
void f(T C){...}
f(A);

В питоне

class A: pass
  1. может делать экземпляры класса (инстансы)
  2. может хранится в переменной/передаваться в функции как параметр. Т.е. это объект первого класса, он имеет точно такие же права как int например. Можно написать вот так вот
a = A() # сделали экземпляр класса А
b = A() # сделали еще один экземпляр класса А
C = A   # положили в C объект класса А
f(A)    # передали в f объект класса А как параметр
AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 1)
Ответ на: комментарий от AntonI

нет.

Всё-таки прочищать мозги питоном в плане ООП – была плохая идея.

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

Dixi.

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

Для каждого ЯП есть своя ниша. Есть своя ниша для статически типизированных ЯП, есть своя ниша для динамически типизированных ЯП.

А вот кричать что «динамически типизированные ЯП бяка потому что с ними есть проблемы в нише которую занимают статически типизированные ЯП» - это и правда плохая идея.

Микроскопом неудобно забивать гвозди, но это не значит что микроскопы ненужны. Молотком неудобно плющить бактерии до размеров когда их можно рассмотреть невооруженным взглядом, но это не значит что молотки ненужны. А человек должен понимать где какой инструмент необходим, и НЕ должен лезть с советами туда где он не разбирается. Если конечно он не хочет выглядеть идиотом;-)

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

Если конечно он не хочет выглядеть идиотом;-)

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

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

Пффф… если это Вы про меня, то крайне забавно наблюдать как Вы оцениваете мои компетенции по нескольким комментам на ЛОРе.

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

Вот это и есть признак идиотизма.

Впрочем помниться у Вас был прекрасный перл «Программа это единственно возможное представление алгоритма»(c) - что как бы говорит о том что Вы в алгоритмах тоже практически ничего не понимаете. Не знать питона для программиста это нормально, категорично высказываться о вопросах в которых ничего не понимаешь нормально для юного ЛОР-овца, но вот не шарить в базовых вещах вроде того что есть алгоритмы - для программиста это зашквар.

Поэтому чем на ЛОРе флудить в выходные, почитайте хоть википедию.

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

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

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

Но сверхкомпетентное мнение имеете по всем вопросам,

Передёргивание и утрирование как приём демагогии.

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

Вы оцениваете мои компетенции по нескольким комментам на ЛОРе

Как и вы:

Впрочем помниться у Вас был прекрасный перл

Вам не кажется, что хватит уже позориться, пеняя на зеркало?

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

Это верно. Вы не только ООП не поняли, но и цель того моего «перла».

Поэтому чем на ЛОРе флудить в выходные, почитайте хоть википедию.

Эту рекомендацию также можете к самому себе применить.

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

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

А как я знаю/понимаю ООП не Вам оценивать. На этом все, мне надоело повторяться. «Мне уже скучно, а Вам непонятно». Добро пожаловать в список друзей.

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

Юноша

Ошибочка.

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

и что нарушение LSP это не дичь.

Это банальное незнание базовых вещей.

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

А как я знаю/понимаю ООП не Вам оценивать.

Ошибочка. Выполз со своей глупостью на публику, да ещё и начал упорно спорить – получи отзыв. Отзыв был, кстати, вполне корректный; слово «идиот» вы опять же употребили первым. Подтвердив свою глупость: умные люди умеют элегантнее.

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