Есть ли в Python «закрытые» переменные в классах?

Похоже, что C ++ все еще не имеет этой функции. И C ++ 11 тоже откладывает отражение ((

Поиск некоторых макросов или создание собственных. Qt также может помочь с отражением (если он может быть использован).

498
задан Zags 3 August 2018 в 14:27
поделиться

3 ответа

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

Если вы по какой-то причине хотите эмулировать частные переменные, вы всегда можете использовать префикс __ из PEP 8 . Python изменяет имена таких переменных, как __ foo , так что их нелегко увидеть для кода за пределами класса, который их содержит (хотя вы можете обойти это, если вы достаточно настроены, точно так же, как вы можете обойти защиту Java, если поработаете над этим).

По тому же соглашению префикс _ означает, что держитесь подальше, даже если вы не технически запрещено делать это . Вы не можете экспериментировать с переменными другого класса, которые выглядят как __ foo или _bar .

912
ответ дан 22 November 2019 в 22:24
поделиться

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

См. здесь для получения дополнительной информации.

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

10
ответ дан 22 November 2019 в 22:24
поделиться

«В java нас учили об общедоступных / частных / защищенных переменных»

«Почему это не требуется в python?»

По той же причине это не требуется в Java.

Вы можете использовать - или не использовать частные и защищенные .

Как программист на Python и Java, я Мы обнаружили, что частный и защищенный - очень и очень важные концепции дизайна. Но с практической точки зрения в десятках тысяч строк Java и Python я никогда на самом деле не использовал private или protected .

Почему бы и нет. ?

Вот мой вопрос "защищен от кого?"

Другие программисты в моей команде? У них есть источник. Что значит защищенный, когда они могут его изменить?

Другие программисты в других командах? Они работают в одной компании. Они могут - с помощью телефонного звонка - получить источник.

Клиенты? Это программирование по найму (как правило). Клиенты (как правило) владеют кодом.

Итак, от кого - именно - я защищаю его?

19
ответ дан 22 November 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: