LINUX.ORG.RU

Exception #05. Бесплатный семинар по Python в Киеве.


0

0

Уважаемые коллеги!

2 июня 2007 года в Киеве состоится пятый семинар по языку программирования Python. Основная тема - построение и использование гибкой компонентной модели в веб-проектах и GUI-приложениях. Докладчики расскажут о взаимодействии интерфейсов вместо взаимодействия объектов, о достоинствах различных реализаций для одного описания интерфейса на примере динамической смены скина, дадут оценку производительности, расскажут о личном опыте применения, а так же приведут исчерпывающие примеры использования гибкой компонентной модели.

Внимание: вход бесплатный!

>>> Подробности

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

> Это про типизацию? Учитывая eval - как мы будем вообще проверять обязательное описание переменных при *компиляции*. Ась?

Кстати, а как обстоят дела с eval в Яве? Или там, как во всех нормальных языках, вначале сказали "eval не нужен" (и эти люди задают нам такие вопросы?), а потом сказали, что костыль reflection -- наше фсио?

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

>после этого?

А ты подумай для чего это бывает нужно вообще в логике, а не в терминах "как сделать на языке такой языковой выкрутас" . Если функция призвана работать с object internal state или это нужно для реализации полиморфизма то у него self/this/etc есть всегда - это метод. Если self передается внешним образом, значит делать эту функцию методом класса понадобиться только из странно-эстетически-религиозных соображений.

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

>как ее вызывать просто как: a = AnotherClass(); a.b = 2; print SomeMethod(a) после этого?

Все зависит от принадлежности функции SomeMethod к классу. Если отсуствует, то как написано, если присутствует то вполне можно и так a.SomeMethod()

Только в первом случае внутри будет стоят нечто типа a.b++ а во втором просто b++.

lefsha
()
Ответ на: комментарий от sv75

>Ну и строй код с отступами, там же чай не 3 строчки будет?

Ловить ошибки типа malformed syntax где пропущен какой-то пробел да еще в динамическом языке - это ацкая работа. Я уже наловился в свое время со сложными макрами cpp когда ошибка всегда в строке "хрен его знает где".

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

> Вы Питон почему-то защищаете больше его автора.

А что в этом такого? Вот основатель Дебиана теперь в Сане как OS platform strategist. Теперь нам сносит Демьяны и убунты и ставнить Соларис, что ли? (Хотя, возможно, он как OS platform strategist предлагает завязать санкам солрякой)

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

> Ловить ошибки типа malformed syntax где пропущен какой-то пробел да еще в динамическом языке - это ацкая работа. Я уже наловился в свое время со сложными макрами cpp когда ошибка всегда в строке "хрен его знает где".

То есть, реальных прецедентов для Питона не замечено? Все по аналогии, когда "в прошлом году Вано так же из колодца вынули" (C) ?

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

>ни легкого динамических полей классов - ну так C# к вашим услугам, инструмент выбирают по задачам.

Посмотри на анонимные структуры C# 3.0:)

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

> Все зависит от принадлежности функции SomeMethod к классу. Если отсуствует, то как написано, если присутствует то вполне можно и так a.SomeMethod()

Но принадлежность функции к классу определяется НЕ на этапе компиляции, а может меняться на этапе выполнения, поэтому функция просто содержит self (или если хотите some_fkng_arg) как первый свой параметр!

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

>Настолько мощный, что использовать его самостоятельно практически не представляется возможным.

Посмотри на мозилловые аппликухи/XUL:)

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

>Кстати, а как обстоят дела с eval в Яве?

Javassist:)

Java - статически типизированный язык.

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

>То есть, реальных прецедентов для Питона не замечено?

Мне с другими языками прецедентов в личном опыте включая хаскел достаточно, чтобы очень любить ошибки типа "нихрена не разобралось, may be this is code formatting problem?"

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

> Посмотри на мозилловые аппликухи/XUL:)

Если это самостоятельное использование, то я разводной мост Патона :-)).

Вы мне дайте хотя пример mod_javascript или Web CMF/CMS на ем же. Не говоря уже о Qt/Gtk-биндингах для него же. Вот тогда и поговорим о прикладной полезности...

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

> Посмотри на анонимные структуры C# 3.0:)

Я просил легкого. К List<sometype> можно что добавить?

С#, я считаю, движется в правильном направлении, но эти структуры по применению довольно ограничены. Как их из/в функции то возвращать, если они анонимны? (Перегружаться в винду что-то лень).

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

>Это неверно. Указания никакого не надо. В нем нет смысла. Если Вы опустите self не изменится ничего! Это чисто искусственная вещь.

Вообще говоря если бы вы почитали как устроено внутри ООП в динамических языках, то вы бы узнали что self есть почти везде. И оно именно так как в питоне передается в каждый из методов объекта. Просто обычно это все прячут за syntax sugar, а в питоне ничего не скрывают. Они презирают все эти штучки для слабых :) Мне самому не нравятся все эти self и тонны знаков подчеркивания и больше симпатичен руби, но про отсутствие в питоне смысла я не кричу =)

e-max
()
Ответ на: комментарий от eugine_kosenko

>Если это самостоятельное использование, то я разводной мост Патона :-)).

А в чем проблема? Просто индустриальные авторы JavaScript разрабатывали его как встраиваемый язык с удобным биндингом к различным деревьям.

Ты видишь принципиальные проблемы? Кому надо тот развлекается например вот-так: http://www.mozilla.org/rhino/jsc.html

Опять же ECMASCriptом является Action Script на котором Flashки пишутся.

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

> А ты подумай для чего это бывает нужно вообще

Да вот мне понадобилось, в том то все и дело. Классы и объекты отдельно, методы к ним вешают динамически исходя из написанного в конфигурации. предлагаешь писать в таких функциях, которые потом точно (да, всегда) станут методами, но не могут быть описаны внутри класса, method вместо def? Так self по-моему лучше.

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

>Ясно. Не читал, но осуждаю...

У тебя проблемы с русским языком?

Простой вопрос - будут проблемы если я без переноса строк и extra spaces сгенерирую программу или нет? Будут? Какие вопросы?

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

> Наличие def недостатком не считаю, см. выше объяснение.

Это не недостаток языка, это недостаток дизайна. Если люди отказались от скобочек, то зачем ввели def... Уж если делать компактным синтаксис так делать до конца.

Но к самому языку это отношение не имеет.

> Про селфм сотри мой ответ r, можешь мне объяснить мою ошибку, возможно я что-то не понимаю.

Про self уже сказано очень хорошо и не мной. Читай redbaron * (*) (25.05.2007 19:03:43)

Он совершенно верно уловил суть проблемы.

Т.е. если мы отказываемся от self, то получаем проблему неразличимости объектов функции и объектов класса, которому принадлежит функция. Эта проблема и возникает из-за того, что в Питоне отсутвует описание переменных как таковое.

И именно поэтому в Boo удалось избавиться от self, так как там существует описание переменных.

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

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

В PHP проблему решили введя ключевое слово global внутри функции, которое определяет глобальные переменные, которые будут использоваться в данной функции. Если глобальных переменных много и функций, которые их используют много, то довольно утомительно каждый раз их описывать. В Питоне же проблему не решили и она осталась.

С учетом классов проблема возвращается, но уже наплевать на нее не получится - именно поэтому появилось служебное слово self, без которого уже нельзя обойтись. Но причина его возникновения чисто искуственная. И по стилистике граничит с goto.

B совершенно ясно, что ничего общего с this эта конструкция не имеет.

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

В этом смысле появление Питона есть шаг назад в создании инструмента быстрого проектирования.

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

P.S. Даже если пишешь на каком-то языке, надо оценивать его трезво, а не петь диферамбы...

lefsha
()
Ответ на: комментарий от r

> Простой вопрос - будут проблемы если я без переноса строк и extra spaces сгенерирую программу или нет? Будут? Какие вопросы?

Чего это вы разнервничались? Ну неудобна в питоне кодогенерация, и что? Это не скрывают, и на это не претендуют. Глупо тащить в язык все возможные техники. Каждому языку - своя ниша. Повторяю, нужна кодогенерация - используйте лисп.

anonymous
()
Ответ на: комментарий от sv75

>предлагаешь писать в таких функциях, которые потом точно (да, всегда) станут методами

Нет. Посмотри в JavaScript - подобного нет. Ну вешай динамически методы - я же ничего не говорил, или про место их описания ничего не говорил. Ты можешь привести примеры когда тебе понадобилась бы одна и та же функция как метод и как отдельная фукнция? Это такая мегаэкзотика может быть что ой ой.

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

Боже мой, это просто химически чистый бред. lefsha, у вас запущенная шизофрения. Срочно к доктору. Срочно.

anonymous
()
Ответ на: комментарий от lefsha

> Это не недостаток языка, это недостаток дизайна.

Еще раз: дизайн прекрасный, потому что каждая строчка, оканчивающаяся на ":", начинается с кейворда. Это по-моему правильная и стильная идея.

> Если люди отказались от скобочек, то зачем ввели def...

Кавычки были убиты, полагаю, в основном по отличным от компактности соображениям. Могу ошибаться.

> Уж если делать компактным синтаксис так делать до конца.

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

>И именно поэтому в Boo удалось избавиться от self, так как там существует описание переменных.

Ее там удалось решить потому, что питон и Boo - разные классы языков. В полностью динамическом питоне со всякими eval обязательная типизация на этапе компиляции может быть как максимум опционной.

Во вторых, селф для описания доступа к полям любого класса мне начинает казаться хорошей практикой. Чтобы не мучаться на тему "а это локальная переменная или же метод?" (я достаточно много писал на языках, где селф не обязателен).

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

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

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

>> Вы Питон почему-то защищаете больше его автора.

>А что в этом такого?

Да ничего. Просто автор живет в сегодня. А Вы еще во вчера... А так понятно, лучше кареты с кучером нет ничего для передвижения...

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

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

Очепятки это естесственное для человека явление. Неучитывать сего факта при разработке языка нельзя.

Почему например человеческий язык такой избыточный? Чтобы вероятность понимания смысла оставалась даже при наличии ошибок.

Краткость же на самом деле не упрощает конструкцию в реальном мире. В этом смысле и отступы, которые так любят ленивые очень опасная вешь. Язык никак не подскажет, что в данном месте сделана ошибка. В таком случае должна быть возможность описать все тоже самое со скобками для наиоболее ответственных вариантов.

Отсутствие этой возможности есть оставление программиста на едине с собой в сложных ситуациях.

lefsha
()
Ответ на: комментарий от r

Круть. Я давно подозревал, что C# 4.0 будет почти питоном, но разнобойным синтаксисом, вызванным его сложной эволюцией. Уж по-моему лучше всегда с self начинать, чем тут пиши, тут не пиши.

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

>Лично у меня отдельно некий енджин. А отдельно внешние данные, описанные не на питоне, но вот иногда им хочется расширить функинальность енджина таким образом. Я не уверен, что это совершенно правильное решение, впрочем. Сейчас я не гтов дискутировать на эту тему, но когда я понял, что я могу именно методы вешать динамически - я был потрясен (мой мозг, увы, пострадал от языков со строгой типизацией)

Это плохой подход. Уже давным давно придумано наследование. Наследуйте старый класс и создавайте на его базе все что Вам надо.

Но при этом не надо уродовать чужой класс.

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

В этом смысле наследование очень чистая операция. Вы не уничтожаете ничью сущность и создаете свою облегченным способом и делаете с ней все что вам угодно.

Я уверен, что спустя некоторое время когда народ наиграется это оффициально будет признано дурным стилем. И все будут высказывать свое фи, как когда-то это было с goto.

Ведь там тоже "мобильность" возрастала и можнно было делать потрясающие вещи. А если вспомнить время когда программы сами себя модифицировали на низком уровне... Там вообще фантазия была безгранична.

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

Все развивается по спирали.... Человечество очевидно должно пройти все тупиковые идеи.

Так что дерзайте... ;-)

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

> Да ничего. Просто автор живет в сегодня

Он уже что-то лучшее написал или просто признал наличии проблем?

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

Нет никакой ложки^W отладки. Есть unit testing. Сколь-нибудь большие проекты написать на питоне без него - да, не выйдет. Но зато как это поймешь, так получается что "язык в отладке помогает, потому что заставляет писать тесты".

> Если язык провоцирует на плохой дизайн и на ошибки по недосмотру, то ничего хорошего в таком языке нет.

Если сложно написать дважды переменную одинаково - есть дополнение кода.

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

Человеческий язык - вообще двусмысленен даже без опечаток. Увы.

> Краткость же на самом деле не упрощает конструкцию в реальном мире. В этом смысле и отступы, которые так любят ленивые очень опасная вешь. Язык никак не подскажет, что в данном месте сделана ошибка.

Отступы все равно заставляют делать все известные мне стандарты оформления кода. И я не могу представить, чтобы у кого-то с опытом писания на питоне больше недели отступы вызвали проблемы (кроме кодогенерации, конечно)

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

> > Вместо self можно написать this. Или еще что-нибудь по вкусу.
> Можно. Только зачем? - А пока не можно, а обязательно к сожалению. 

почему это обязательно?

class Vodka(drink, alcohol):
  def __init__(self, amount=200):
     self.amount=int( amount )
  def __str__(self):
     return '%d гр. водяры' % self.amount
  @static_method
  def get_stakan(amount=200):
     return Vodka(amount)

пример.
stak = Vodka.get_stakan(150)
print stak
# выводит '150 гр. водяры'

def тоже не всегда нужен. ты можешь написать

  get_stakan=lambda amount: Vodka(amount)

или даже что-нить типа

  ostalosh_che = property( lambda self: bool(self.amount) )


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

> Это плохой подход. Уже давным давно придумано наследование. Наследуйте старый класс и создавайте на его базе все что Вам надо.

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

> Но при этом не надо уродовать чужой класс.

Автор енджина (это я же) ничего против этого не имеет. Это специальный класс для таких целей. У меня складывается ощущение, что вы просто не сталикались с подобными задачами. Это не автоматизация бизнеса (а впрочем, если бы в 1С был тот же питон кругом?).

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

> Очепятки это естесственное для человека явление. Неучитывать сего факта при разработке языка нельзя.

да ладно так и признайся что у тебя в блокноте autoindent`а нет) и строки не нумирются) вылезает эксцепшн - приходится на счетах номера строк отсчитывать. веть в петоне нет модулей и пришлось сложить всё в один файл.

вот qbasic - другое дело. он в отладке помогает а не мешает) и с блокнотом всё ок - едешь в нем как в болиде)

pawnhearts ★★★★★
()

Охохонюшки мои! Обратно они нам про self да про отступы. Вот честное флеймерское, реально достало о них спорить. Давайте уже в фак про это напишем и закроем тему. Неужели других претензий к языку не находится? :)

PS Что-то рубистов в этом чате нету. У нас с ними, что ли, перемирие? :D

ero-sennin ★★
()
Ответ на: комментарий от lefsha

> Наследуйте старый класс и создавайте на его базе все что Вам надо.

Наследование порождает сильную связность. Знаете такую проблему -- "хрупкость базового класса"?

> Вы не уничтожаете ничью сущность и создаете свою облегченным способом и делаете с ней все что вам угодно.

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

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

> Повторяю, нужна кодогенерация - используйте лисп.

В Лиспе тоже кодогенерацией не сильно увлекаются.

И потом, в Лиспе слишком много скобочек... :-)

eugine_kosenko ★★★
()

а в Новосибирске таких семинаров не намечаетсо?

n00dle
()

> Не надо грубить.

Нет, правда. Я обыкновенно вполне сдержан, но с такой клинической тупостью иначе нельзя. Ведь откровенная же ересь.

> И кстати у нас студентов, крестящихся и сплевывающих через левое плечо при словах "нет обязательного описания переменных" - похоже пол-кафедры, если не более.

Да я чтоль не знаю. Было два одногруппника таких. Сплевывали все, когда я лабы на питоне приносил. А теперь работают. Пишут на питоне. "Начальство так решило". Досплевывались.

anonymous
()
Ответ на: комментарий от lefsha

> В PHP проблему решили введя ключевое слово global внутри функции, которое определяет глобальные переменные, которые будут использоваться в данной функции. Если глобальных переменных много и функций, которые их используют много, то довольно утомительно каждый раз их описывать. В Питоне же проблему не решили и она осталась.

Открою еще одну страшную тайну: в Python тоже есть global. Тоже сюрприз?

:-)

> B совершенно ясно, что ничего общего с this эта конструкция не имеет.

Кому ясно?

Они имеют как минимум одну общую букву s. И обе могут быть использованы для получения ссылки на экземпляр класса. А также для доступа к его членам.

Вам этого недостаточно?

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

> Простой вопрос - будут проблемы если я без переноса строк и extra spaces сгенерирую программу или нет? Будут?

Умеючи можно даже член сломать, как об этом уже правильно Саныч заметил. > Какие вопросы?

Реальные проблемы с Python были? Или только в вакууме со сферическими конями?

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

> А в чем проблема?

Я подозреваю, что проблема в тормознутости, которая есть следствие невероятной мощи языка. Что начисто убивает все его преимущества за пределами его ниши.

> Ты видишь принципиальные проблемы?

Я не вижу популярных и широко распространенных решений на js за пределами браузерных свистелок.

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

Идея, господа! Давайте придумаем для Питона альтернативный синтаксис
на S-выражениях.

(class Hello object (
    (def __init__ (self name)
        (= (. self name) name))
    (def greet (self)
        ((print (+ 'Hello ' name))
        (print 'Python rocks! Yay!'))))

class Hello(object):
    def __init__(self, name):
        self.name = name
    def greet(self):
        print 'Hello ' + name
        print 'Python rocks! Yay!'

Осталось только написать транслятор туда-сюда, и вопрос с
кодогенерацией и метапрограммированием можно считать закрытым. :)

ero-sennin ★★
()
Ответ на: комментарий от eugine_kosenko

> Открою еще одну страшную тайну: в Python тоже есть global. Тоже сюрприз?

Вы не поняли о чем была речь.

>> B совершенно ясно, что ничего общего с this эта конструкция не имеет.

>Кому ясно? Они имеют как минимум одну общую букву s. И обе могут быть использованы для получения ссылки на экземпляр класса. А также для доступа к его членам. Вам этого недостаточно?

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

А так увы помочь не могу.

lefsha
()
Ответ на: комментарий от ero-sennin

> Охохонюшки мои! Обратно они нам про self да про отступы. Вот честное флеймерское, реально достало о них спорить. Давайте уже в фак про это напишем и закроем тему. Неужели других претензий к языку не находится? :)

Скорее всего Вы просто не видите, что проблемы языка совершенно в другом. Это поклонники Питона замечают только это.

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

> почему это обязательно?

странный Вы товарищь.. сами спрашиваете сами используете...

Выбирайте одно из двух...

lefsha
()
Ответ на: комментарий от sv75

> зато как это поймешь, так получается что "язык в отладке помогает, потому что заставляет писать тесты".

Странная помощь... и все только ради того чтобы не описать переменную??? за то надо писать тесты... замечательно. За что боролись как говорится...

> Отступы все равно заставляют делать все известные мне стандарты оформления кода. И я не могу представить, чтобы у кого-то с опытом писания на питоне больше недели отступы вызвали проблемы (кроме кодогенерации, конечно)

Отступы не заставляет делать НИКТО! И код обычно понимается одинаково вне зависимости от форматирования.

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

Кроме того представьте. Вы делаете отступы пробелами, а мне табы нравятся. Вы представляете, что мы вместе наразрабатываем...

Так что как видно это частные проблемы Вашего воображения.

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

>Я говорил о С имея ввиду процесс компиляции, а не структуру языка.

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

anonymous
()
Ответ на: комментарий от sv75

> Не смешно. Класс создается в одном месте ("engine"). расширяется в другом в зависимости от желания "скриптовой" части программы. Скриптовая часть в целом не на питоне, там скорее императивное что-то.

Можно домой и через окно заходить... Все зависит от того, чего именно хочется...

> Автор енджина (это я же) ничего против этого не имеет.

Странные асоциации... Я вроде ни разу не обмолвился, что вся проблема в том, что авторы классов не разрешают их менять... Да и глубоко по барабану это, что там себе автор думает.

Если хорошенько подумать, то можно прийти к выводу, что подобные игры начисто разрушают этот самый объектный подход.

Если любая функция может быть членом любого уже написанного класса, то нет никакого смысла в классах как таковых.

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

Это на самом деле говорит, что ОО в Питоне нет вообще. Оно вырождено. Т.е формально оно есть, а смысла в нем нет.

lefsha
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.