Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 23, 2011 05:08:09

Virtuos86
От:
Зарегистрирован: 2010-11-17
Сообщения: 33
Репутация: +  1  -
Профиль   Отправить e-mail  

Юзать классы или нет?

Chrizt
В идеале, это могло бы выглядеть так: входные данные инициируются в класс на самой верхушке по иерархии, затем этот класс использует другие (не производные) классы для последующей обработки и валидации данных, ну и на выходе получается уже готовый продукт, возвращаемый пользователю.
Вы знаете, то что Вы описали никоим образом не нуждается в классах.
Требованиям “подал на вход данные -> проверил данные -> обработал данные -> выдал результат” идеально соответствует цепочка функций. Вам ведь, как я понимаю, не нужно в процессе сохранять промежуточные результаты?
P.S.: как пишется в Kaapython? Поскольку тестировать такой код на самом телефоне видимо не возможно, то автодополнение, предполагаю, хромает.
Можно накатать плагин, который бы дополнял список автодополнения dir'ом нужных библиотек, того же PIL.



Офлайн

#2 Авг. 25, 2011 19:24:22

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Юзать классы или нет?

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



Офлайн

#3 Авг. 27, 2011 05:52:28

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

Юзать классы или нет?

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).

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

Резюме: Всё-таки, классы оказались удобнее для меня в данном случае! ;)



Отредактировано (Авг. 27, 2011 15:24:22)

Офлайн

#4 Авг. 27, 2011 07:18:18

Virtuos86
От:
Зарегистрирован: 2010-11-17
Сообщения: 33
Репутация: +  1  -
Профиль   Отправить e-mail  

Юзать классы или нет?

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
в декларативности
?
;)
Извиняюсь за оффтоп.



Офлайн

#5 Авг. 27, 2011 13:22:14

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

Юзать классы или нет?

Virtuos86
В чём разница между

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

ЗЫ. По оффтопам, может в аську? =)



Офлайн

#6 Авг. 27, 2011 15:03:10

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Юзать классы или нет?

Chrizt
Isem написал:

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



Офлайн

#7 Авг. 27, 2011 15:18:27

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

Юзать классы или нет?

Isem
Я такого не мог написать даже будучи в стельку пьяным.
Да прдон, ёлы-палы. Кнопочка “Цитировать”, по-видимому, подкачала.
Пофиксил.



Отредактировано (Авг. 27, 2011 15:25:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version