Подтвердить что ты не робот

Почему у python нет модификатора доступа? А какие есть альтернативы в python?

почему у python нет модификатора доступа, например, в С#, java i.e public, private и т.д. Каков альтернативный способ инкапсуляции и скрытия информации в python.

4b9b3361

Ответ 1

От Wikipedia:

[Python] имеет ограниченную поддержку частных переменных, используя название mangling. Подробнее см. В разделе "Классы" учебника. Многие Однако пользователи Python не чувствуют необходимости в частных переменных. slogan "Мы все соглашаемся с взрослыми здесь" используется для описания этого отношение. Некоторые считают, что информация скрывается, чтобы быть неписаной, в что он предполагает, что рассматриваемый класс содержит неэстетичные или плохо спланированные внутренности. Однако самый сильный аргумент в пользу имени манипулирование - это предотвращение непредсказуемого поломки программ: введение новой публичной переменной в суперклассе может разбивать подклассы если они не используют переменные "private".

Из учебника: Как верно для модулей, классы в Python не создают абсолютного барьера между определения и пользователя, а скорее полагаться на вежливость пользователя, а не на "вломиться в определение".

Те же чувства описаны в Мы все соглашаемся с взрослыми в разделе Справочник автостопов по Python!

Ответ 2

Альтернативой можно назвать ваш "private" (они не являются частными в python) с идентификаторами, которые позволяют легко идентифицировать, что эти члены не должны использоваться извне.

Например:

class RedmineWriter:

    __server = None
    __connected = False
...
...
...

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

Посмотрите: http://docs.python.org/2/tutorial/classes.html#tut-private

Ответ 3

Какие различия делают модификаторы доступа в С# и java? Если у меня есть исходный код, я мог бы просто изменить доступ с частного на публичный, если я хочу получить доступ к переменной-члену. Только когда у меня есть скомпилированная библиотека, модификаторы доступа не могут быть изменены, и, возможно, они предоставляют некоторые полезные функции для ограничения API. Тем не менее, Python не может быть скомпилирован, поэтому совместное использование библиотек требует совместного использования исходного кода. Таким образом, пока кто-то не создаст компилятор Python, модификаторы доступа ничего не добьются.