Найти - Пользователи
Полная версия: Юзать классы или нет?
Начало » Python для экспертов » Юзать классы или нет?
1 2 3
Virtuos86
Chrizt
В идеале, это могло бы выглядеть так: входные данные инициируются в класс на самой верхушке по иерархии, затем этот класс использует другие (не производные) классы для последующей обработки и валидации данных, ну и на выходе получается уже готовый продукт, возвращаемый пользователю.
Вы знаете, то что Вы описали никоим образом не нуждается в классах.
Требованиям “подал на вход данные -> проверил данные -> обработал данные -> выдал результат” идеально соответствует цепочка функций. Вам ведь, как я понимаю, не нужно в процессе сохранять промежуточные результаты?
P.S.: как пишется в Kaapython? Поскольку тестировать такой код на самом телефоне видимо не возможно, то автодополнение, предполагаю, хромает.
Можно накатать плагин, который бы дополнял список автодополнения dir'ом нужных библиотек, того же PIL.
Isem
Virtuos86
Вы знаете, то что Вы описали никоим образом не нуждается в классах.
Важно, как вы думаете, а не - что делаете.
Chrizt
Virtuos86
Вы знаете, то что Вы описали никоим образом не нуждается в классах.
Хмм. Представьте себе Текст. Текст - это строка (aka последовательность символов). Текст состоит из Строк, Строки состоят из Слов, Слова состоят из Символов. Символы - это строковые данные.
При этом при всём, текст разбивается на строки, слова и символы по строго определённым правилам, каждая строка, слово или символ имеют свои, ОСОБЫЕ методы и свойства. Вот именно поэтому и нужны были классы.

Virtuos86
не нужно в процессе сохранять промежуточные результаты?
Все мы, программируя что-то, немножко заглядываем в будущее. Я постарался делать так, чтобы данные, всё же, можно было сохранять, в случае, если это понадобится.

Virtuos86
P.S.: как пишется в Kaapython?
Обалденно! Правда, памяти часто не хватает, чтобы писать и отлаживать код (>10Кб). Но всё же, обалденно!! Спасибо за столь удобную IDE!

Virtuos86
Поскольку тестировать такой код на самом телефоне видимо не возможно, то автодополнение, предполагаю, хромает.
Вообще-то, я себе для необходимых, но отсутствующих модулей сделал псевдомодуль под названием pseudomodules.py (фактически, это пустые классы, либо с парочкой псевдометодов).
А ещё пришлось, например, написать функцию enumerate(), ведь её нет в 1.4.5, который у меня установлен. Точнее, я откуда-то спёр код этой функции =) Ещё в 1.4.5 нет, например, функции sum, а так же, не работают конструкции типа “a if b else c” :( Но это всё - не беда =)

Virtuos86
Можно накатать плагин, который бы дополнял список автодополнения dir'ом нужных библиотек, того же PIL.
На телефоне автодополнение нужно, в основном, вроде только чтобы меньше печаткать :) С другой стороны, куда полезнее было бы узнавать о возможных/необходимых параметрах функции. В 95% случаев Call Tip не работает.


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

Не даром же говорят, что подобное структурирование данных не только позволяет в будущем проще читать код, но и для мозга более удобная и правильная, как карты ума/ментальные карты/майндмэпс (mind maps).

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

Резюме: Всё-таки, классы оказались удобнее для меня в данном случае! ;)
Virtuos86
Chrizt
Хмм. Представьте себе Текст. Текст - это строка (aka последовательность символов). Текст состоит из Строк, Строки состоят из Слов, Слова состоят из Символов. Символы - это строковые данные.
При этом при всём, текст разбивается на строки, слова и символы по строго определённым правилам, каждая строка, слово или символ имеют свои, ОСОБЫЕ методы и свойства. Вот именно поэтому и нужны были классы.
Это всё понятно. Я только хочу напомнить прописную истину о том, что и ООП, и процедурное программирование, и функциональное в общем случае это только парадигмы, а не серебряные пули. И если нет конкретного юзкейса к применению какого-либо подхода, говорить что что-то лучше других подходит не стоит. Тем более, что Вы интересовались производительностью решений, а использование классов привносит определенную лишнюю работу, как-то поиск атрибутов и прочая специфичная магия Python-объектов.
Chrizt
Все мы, программируя что-то, немножко заглядываем в будущее. Я постарался делать так, чтобы данные, всё же, можно было сохранять, в случае, если это понадобится.
Это снимает часть вопросов.
Chrizt
Virtuos86
Virtuos86 написал:
P.S.: как пишется в Kaapython?
Обалденно! Правда, памяти часто не хватает, чтобы писать и отлаживать код (>10Кб). Но всё же, обалденно!! Спасибо за столь удобную IDE!
Добавление фич неминуемо влечет увеличение потребления оперативной памяти. В редакторе проделана серьезная работа на минимизацией подъедания оперативки. За отзыв спасибо, в своё время меня подкупило именно это в Ped, и в развитии редактора я ориентируюсь именно на удобство в использовании.
Chrizt
Virtuos86
Virtuos86 написал:
Поскольку тестировать такой код на самом телефоне видимо не возможно, то автодополнение, предполагаю, хромает.
Вообще-то, я себе для необходимых, но отсутствующих модулей сделал псевдомодуль под названием pseudomodules.py (фактически, это пустые классы, либо с парочкой псевдометодов).
А ещё пришлось, например, написать функцию enumerate(), ведь её нет в 1.4.5, который у меня установлен. Точнее, я откуда-то спёр код этой функции Ещё в 1.4.5 нет, например, функции sum, а так же, не работают конструкции типа “a if b else c” Но это всё - не беда
Решение с модулем в принципе правильное. Другое дело, что я люблю поагитировать пользователей насчет написания индивидуальных плагинов. В Вашем случае достаточно было бы __init__.py плагина прописать одну строчку:
from pseudomodules import *
и всё, автодополнение по ним заработало уже со старта редактора.
enumerate я сам добавил в ui.py, хотя, кажется, нигде им не воспользовался, поэтому эта функция есть изкоробки, можете проверить.
sum нет, а конструкции “a if b else c” мне не нравятся, хотя удивляет, как умудрились впихнуть их в синтаксис, без добавления лишних кейвордов и достаточно удачно вписав их туда.
Chrizt
Virtuos86
Virtuos86 написал:
Можно накатать плагин, который бы дополнял список автодополнения dir'ом нужных библиотек, того же PIL.
На телефоне автодополнение нужно, в основном, вроде только чтобы меньше печаткать С другой стороны, куда полезнее было бы узнавать о возможных/необходимых параметрах функции. В95% случаев Call Tip не работает.
Call Tip работает с байткодом функции. Соответственно, если код, содержащий определение функции, ни разу не был запущен на выполнение, нужную информации брать неоткуда. Надо бы наверное, эту возможность довести до ума, я как раз сейчас новую версию потихоньку готовлю к выпуску.
Chrizt
Резюме: Всё-таки, классы оказались удобнее для меня в данном случае!
Хм. Структуры данных и без классов писали и пишут. Тем более если есть такой богатый набор стандартных типов данных. Я как-то поднимал этот вопрос в меру своих скромных возможностей в своём бложике.
В чём разница между
STRING = 0
INTEGER = STRING + 1
DICTIONARY = INTEGER + 1
data = ['foo', 1, {}]
print data[STRING], data[INTEGER], data[DICTIONARY]
и
class data:
string = 'foo'
integer = 1
dictionary = {}
print data.string, data.integer, data.dictionary
в декларативности
?
;)
Извиняюсь за оффтоп.
Chrizt
Virtuos86
В чём разница между

Virtuos86
в декларативности
?
Эмм. По мне - так я бы запутался сразу, сходу в первом примере, а вот второй ясен и прозрачен.

ЗЫ. По оффтопам, может в аську? =)
Isem
Chrizt
Isem написал:

не нужно в процессе сохранять промежуточные результаты?
Я такого не мог написать даже будучи в стельку пьяным.
Chrizt
Isem
Я такого не мог написать даже будучи в стельку пьяным.
Да прдон, ёлы-палы. Кнопочка “Цитировать”, по-видимому, подкачала.
Пофиксил.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB