Уведомления

Группа в Telegram: @pythonsu

#1 Март 16, 2016 03:25:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Подскажите, почему программисты на питон не используют такой стиль кода?

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



Офлайн

#2 Март 16, 2016 05:06:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Подскажите, почему программисты на питон не используют такой стиль кода?

py.user.next
Ну хорошо, я - говнокодер и не знаю питона. Давай послушаем, что на этот счет говорит Гвидо?
вот ссылка на интервью
вот конкретная цитата

About: Immutable object properties

If you want ALL the attributes to be read-only, you can use collections.namedtuple.
This sort of control over other developers is generally considered un-Pythonic because it violates the “we're all adults here” principle. If the documentation says “Don't assign to X”, you know you are taking your chances when you do it. If you feel that you have a good enough reason to do it, bully for you, but don't complain when it breaks.
One feature Python already has which violates this principle is the ‘__’ prefix name mangling. I've had the misfortune of working with a library where I really had a very good reason to change one of the “private” variables in a very safe way, but because the original developer had arbitrarily made ALL his attributes “__*”, I had to fork the library and fix it first.

мы же не будем спорить с Гвидо?



Офлайн

#3 Март 16, 2016 05:22:17

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Подскажите, почему программисты на питон не используют такой стиль кода?

Ну или вот
пишет Karl Fast

> I came across a quote “we are all consenting adults here” I think in
> explaining why it is not necessary to have type declaration
> statements in Python, in contrast to other strongly-typed languages.

This expression is also used in the object-oriented python
literature to explain python's attitudes about private class
members, which python doesn't have.

When you create an instance of some class there is nothing to
prevent you from poking around inside and using various internal,
private methods that are (a) necessary for the class to function,
BUT (b) not intended for direct use/access.

Nothing is really private in python. No class or class instance can
keep you away from all what's inside (this makes introspection
possible and powerful). Python trusts you. It says “hey, if you want
to go poking around in dark places, I'm gonna trust that you've got
a good reason and you're not making trouble.”

After all, we're all consenting adults here.

C++ and Java don't have this philosophy (not to the same extent).
They allow you create private methods and static members.

Perl culture is like python in this respect, but Perl expresses the
sentiment a bit differently. As the Camel book puts it,

“a Perl module would prefer that you stayed out of its living room
because you weren't invited, not because it has a shotgun.”

But the sentiment is identical.

–karl



Офлайн

#4 Март 16, 2016 05:27:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Подскажите, почему программисты на питон не используют такой стиль кода?

Оттуда же

> translation doesn't always allow me to understand the point that is
> being made (especially when there is no attempt to elaborate beyond a
> bland assertion that some code is or is not ‘pythonic’). Can anyone
> suggest some resources that have a number of code examples that
> illustrate ‘pythonic’ vs. ‘non-pythonic’ style?

Unpythonic is doing lots of type checking, or trying really hard to make
something private/protected
. Or using an index to loop through a list
rather than just doing “for item in mylist”. Basically anything people do
because that's how they do it in other languages, thinking it's as good as
it gets. Code obsfucation (Perl) is unpythonic too. People you don't like
fall in the same category. It's a very broad term .



Офлайн

#5 Март 16, 2016 20:20:15

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Подскажите, почему программисты на питон не используют такой стиль кода?

py.user.next
“содержимое класса нужно открыть для редактирования извне”.
Это вы передергиваете. Написано что если поле входит в открытый интерфейс, и на текущей стадии проекта не предусмотрено побочных эффектов от манипуляции с ним, то его надо реализовывать как открытое поле.

Если вы в этих условиях реализуете этот интерфейс как свойство, а не как открытое поле то вы НИЧЕГО не получите от этого, кроме увеличения объема кода и замедления обращения к этому свойству.

Если не согласны, приведите пример, что это дает.

Подумайте иначе открытые поля были вы вообще не нужны, причем не только в питоне но и в C++ и в Java и в других языках.

py.user.next
глобальные переменные, значит пользоваться ими нужно и это правильно”. Примерно такая же ахинея.

О чем вы говорите? Вы сами постоянно пользуетесь глобальными переменными в КАЖДОЙ вашей программе. Без этого невозможно программировать.



Офлайн

#6 Март 17, 2016 07:16:44

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Подскажите, почему программисты на питон не используют такой стиль кода?

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

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

doza_and
О чем вы говорите?
У тебя интерфейс наполовину разломан, а ты даже этого не понимаешь, потому что не пользуешься им. Написал там чота и забыл.



Офлайн

#7 Март 17, 2016 08:08:15

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Подскажите, почему программисты на питон не используют такой стиль кода?

py.user.next
Всё-таки ты решил поспорить с Ван Россумом?
Вот его электронка: guido (at) python.org
Будем ждать, что в следующем интервью Гвидо выразит в корне другое мнение по поводу pythonic way, а в следующем релизе питона появятся модификаторы доступа.



Офлайн

#8 Март 19, 2016 06:54:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Подскажите, почему программисты на питон не используют такой стиль кода?

FishHook
If you feel that you have a good enough reason to do it, bully for you, but don't complain when it breaks.
Вот это же и относится к изменению полей извне. Он пишет про запись, но то же самое касается и чтения. Ты никак не можешь угадать, что там будет записано. Представь, что ты читаешь это поле, думая, что там одна инфа, а кто-то другой записывает в это поле свою инфу, не зная про тебя. Причём вы оба не разработчики класса, а наружние пользователи. Получается такая же хрень, как и с глобальными переменными.

А типа помечать все “приватные” переменные подчёркиванием - тоже хрень. Просто представь, всё, что ты обычно пишешь в других языках в приватной секции, ты вдруг переименовываешь - и код превращается в скопление подчёркнутых имён.



Отредактировано py.user.next (Март 19, 2016 07:00:17)

Офлайн

#9 Март 19, 2016 09:25:15

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Подскажите, почему программисты на питон не используют такой стиль кода?

py.user.next
и код превращается в скопление подчёркнутых имён.
Именно так и происходит. Более того не просто подчеркнутых, что пол беды, а записей жуткого вида
self._a=self._b+self._c
вместо
a=b+c

Вы конечно можете внутри метода написать:
class Ta:
   def some(self):
      a=self._a
      b=self._b
Можно даже автоматизировать этот процесс, затаскивания имен в локальное пространство.

Если вы с этим не смирились, то наверное не до конца программист на питоне.

Поэтому кстати часто в питоне то что на C++, Java точно было-бы классом, заменяется на всякие надстройки над функциями.
def a(some,a=34,b=45):
   i=3
   j=some*6
   for ...:
      yield x

тут уж до локальных i,j вообще трудно добраться



Отредактировано doza_and (Март 19, 2016 09:26:27)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version