LINUX.ORG.RU

Изящество и неловкость Python. Часть 2


0

0

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

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

★★★

Проверено: Shaman007 ()

О нет!!! Только не это!!!

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

Жесть! :)

Bioreactor ★★★★★
()

Впервые более-менее вменяемая статья в серии. Ну надо же.

yk4ever
()

Хорошая статья, часть вопросов прояснилась.
Конечно, немного грустно, что в Python местами есть
неразбериха и "there is more than one way to do it" :(

Но с другой стороны, для большинства приложений хватит 2 способов:
1) если не нужно контролировать доступ к аттрибуту
   class MyClass(object):
      def __init__(self, a):
         self.foo = a

   A = MyClass(0)
   print A.foo
   A.foo = 3
   ...

2) если нужно, то идем путем Java.
   class MyClass(object):
      def __init__(self, a):
          self.__foo = a
      def getFoo(self):
          return self.__foo
      def setFoo(self, a):
          self.__foo = a

   A = MyClass(0)
   print A.getFoo
   A.setFoo(3)
   ...

И в обоих случаях не нужно заморачиваться со всеми этими
__getattr__, __getattribute__ и проч.

V_P
()

Один из аргументов питонистов, что язык содержит мало лишнего... здесь не работает вообще. К статье добавить метаклассы и декораторы и все - можно писать целую книгу о том как поиметь доступ к атрибутам. Мрак :(

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

> Но с другой стороны, для большинства приложений хватит 2 способов: > 1) если не нужно контролировать доступ к атрибуту > class MyClass(object): > def __init__(self, a): > self.foo = a > > A = MyClass(0) > print A.foo > A.foo = 3 > ... >

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

anonymous
()

программирование ради программирования? язык созданный извращенцами, для извращенцев.

anonymous
()

Наш паровоз, вперёд лети -
В коммуне остановка!
Иного нет у нас пути
...и это так неловко :-$

(c) Штырлиц

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

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

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

V_P
()

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

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

>> __В__ __питоне__ __все__ __методы__ __с__ __двумя__ __дебильными__ __подчеркиваниями____?__

неа, только "специальные" :) надмножество тех методов, что в C++
обозначаются "operator <...>".
а псевдо-скрытые аттрибуты имеют два дебильных
подчеркивания в начале ;)

V_P
()

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

cathode
()

Я так понял что в питоне изобретают get/set properties которые в C# уже давно есть?

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

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

> если нужно, то идем путем Java.

Используйте property и не вызывайте геттеры и сеттеры явно - в питоне это моветон.

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

> Я так понял что в питоне изобретают get/set properties которые в C# уже давно есть?

В питоне они тоже давно есть. В статье рассматриваются и другие способы.

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

> Я так понял что в питоне изобретают get/set properties которые в C# уже давно есть?

Не правильно понял. Садись, двойка.

кстати пожалуй рекорд. обычно в первых 10 сообщениях проявляется некто, кричащий, что вышел mono/C# и все остальное умерло.

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

> Ну почему же. Не умерло, а гниет и воняет... :)

Интересно, а твои слова - это не вонь?

> Да, по питону у меня "2"

Это очевидно.

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

Язык может и нужный, но некрасивый. Perl намного лучше, особенно если из него выкинуть всю фигню, оставленную "для совместимости" и подправить модули и классы. Это я про Perl 5. Perl 6 такой же язык, как и Python, Ruby и т.п. - ничего интересного. Если в Ponie(Perl 5 на Parrot) выкинут устаревшие функции(очень надеюсь, несмотря на то, что Ponie разрабатывается также только для совместимости), то он будет намного лучше Python.

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

>> Язык может и нужный, но некрасивый. Perl намного лучше, особенно если из него выкинуть всю фигню

"То Перл станет такой же "некрасивый" как Питон" - ты это хотел сказать?

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

> Слава ТНБ, Stink-over-IP еще не реализован.

пытались делать :) девайсы с запахом на подобии принтеров.

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

>> Я так понял что в питоне изобретают get/set properties которые в C# уже давно есть? а подчеркивания и дебильное слово def специально для того чтобы продемонстрировать "простоту" языка?

C# не нужен, в нем все через жопу по сравнению с питоном

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

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

Эта пять!

С++ язык вполне простой и однозначный - особенно если выкинуть из него всю фигню и переписать добавив лямбды :)))

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

> Язык может и нужный, но некрасивый. Perl намного лучше, особенно если...

О да, люди любят спорить о том, что не имеет значения (C) Важно лишь решение задачи, а то, какой "молоток" при этом использовать --- уже второй вопрос и это субъективно.

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

>Язык может и нужный, но некрасивый.

да. "рисунки на перл" вне концуернции :)

Muromec ☆☆
()

__Педон__ __ненуна___ !

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

> 2) если нужно, то идем путем Java. class MyClass(object): def __init__(self, a): self.__foo = a def getFoo(self): return self.__foo def setFoo(self, a): self.__foo = a

Это не "путь Java", а "путь ООП". Изучайте классику иногда. Гради Буча, в частности.

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

> Это не "путь Java", а "путь ООП". Изучайте классику иногда. Гради Буча, в частности.

А фанатов "пути ООП" вообще следует анально расстреливать, я давно это говорю.

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

> Какой же хренью люди страдают, лишь бы Lua не использовать.

А там уже появилась нормальная стандартная библиотека?

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

> Оно скоро настигнет Oberon по популярности.

Недавно по рейтингу TPCI питон порвал и шарп, и перла.

Закапывайте шарп и перл, давно говорю.

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

>>А фанатов "пути ООП" вообще следует анально расстреливать, я давно это говорю.

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

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

>> авторитетно. а пример?

Конечно авторитетно, особенно если учесть что твой пф-буль-в-луже про set/get был очень громким. Деточка, в питное setattr/getattr появились когда еще до-диез вместе .net в помине не было.

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

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

Воистину так, если применять его без фанатизма и в меру, и помнить, что есть и другие подходы. А вот кто будет выскакивать с красноглазывми тезисами типа "прямой доступ к атрибутам объекта не труъ ООП, значит в топку", тот отправлен будет мною в ж-пу.

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

Не знал вот и спросил. А ирония к питону у меня врожденная :) Вобщем я так понимаю что оно ничем не лучше (кроме того что старше). Неловкость питона я уже видел. А в чем изящество-то?

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

Ну прямо "гетзефактс", особенно про def

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

Кстати, ссылка по теме: http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html. Стив хоть и многословно излагает, но мысли там двигает правильные: все эти геттеры-сеттеры и прочие подобные вещи не столько облегчают разработку больших программ, сколько сами способствуют разрастанию кода до несусветных размеров.

ero-sennin ★★
()

Ну отрывки документации от IBM в своём духе.. Вроде бы и есть налёт детализации, но, как-то, в отрыве от общей темы..

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

> __В__ __питоне__ __все__ __методы__ __с__ __двумя__ __дебильными__ __подчеркиваниями____?__

> программирование ради программирования? язык созданный извращенцами, для извращенцев.

> Я так понял что в питоне изобретают get/set properties которые в C# уже давно есть?

> Perl намного лучше, особенно если из него выкинуть всю фигню

> __Педон__ __ненуна___ !

> Оно скоро настигнет Oberon по популярности.

> Какой же хренью люди страдают, лишь бы Lua не использовать.

Вы все долбанутые малолетние тролли или это один и тот же??? Вы хоть раз нормальные проекты делали, тем более на Питоне?

Мне как-то фыркающий молодняк привели в команду, чтобы опыта набирались. Из них кто с .NET, кто с Java, кто с VC++, кто с PHP, кто по дрова. Сейчас уже все по полной на Питоне пишут модули и на Линукс перешли, и попробуй их сгони теперь.

А вы только воющие долбоёбы и тролли. Питон - замечательный язык общего назначения. У нас и система на нём и тесты и многое другое работает. Эти ребята, кстати, зарабатывают поболее чем народ с .NET, Java и им подобным.

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

>> А в чем изящество-то?

>Отвечу вопросом на вопрос: "А в чем неловкость то?"

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

А неловкость - в том, что ООП в Python реализовано через Z..пу (как пишет автор статьи - "в несколько этапов")

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