В Python нет модификаторов доступа. Соглашение состоит в том, чтобы префикс подчеркивания методов и переменных, к которым не ожидается доступ из-за пределов класса. Это технически мешает вам получить доступ к этому полю из стороннего класса? Не за что; но если вы это сделаете, вы сами по себе, и вы рискуете что-то сломать, не имея возможности обвинить другой класс.
В C # существуют модификаторы доступа, но они все еще являются лишь соглашением, которое обеспечивается компилятором, но все же соглашением. Это означает, что технически можно по-прежнему обращаться к закрытым переменным и изменять их, либо с помощью Reflection, либо напрямую изменяя память (как это делают тренеры игр ). Последствия точно такие же: если переменные вашего класса изменяются с помощью Reflection из другого класса или с помощью вмешательства в память другого приложения, и это что-то нарушает в вашем классе, это не ваша ошибка.
Обратите внимание, что это, очевидно, создает проблемы безопасности, когда третьи лица могут получить доступ к вашим данным; что-то, что приводит к зашифрованным вариантам строки и аналогичным структурам данных. Но защита вашего кода от такого использования больше связана с ограничениями доступа ОС и уровня кода и не имеет ничего общего с отражением как таковым.