Вы можете использовать ведущее подчеркивание в названии, чтобы сообщить читателям код, что указанное имя является внутренней деталью, и они не должны полагаться на это, оставаясь в будущих версиях. Такое соглашение действительно все, что вам нужно - зачем взвесить язык с помощью механизма принуждения?
Данные, как и методы, должны быть общедоступными (без основного подчеркивания), если они являются частью API-интерфейса вашего класса, который вы намерены поддерживать в будущем. В C++ или Java это вряд ли произойдет, потому что если вы хотите изменить член данных в метод доступа, вам не повезло - вам придется разорвать ваш API, и каждый клиент этого класса должен будет изменение.
В Python и других языках, поддерживающих конструкцию типа property
, это не тот случай - вы всегда можете заменить элемент данных свойством, которое прозрачно вызывает методы доступа, API не изменяется и не имеет код клиента. Итак, в Python и других языках с конструкциями типа property
(я считаю, что такие языки .NET такие, как на уровне исходного кода, но не обязательно на уровне байт-кода), вы также можете оставить свои данные общедоступными, когда они являются частью API и в настоящее время не нужны аксессоры (всегда можно добавлять методы доступа к более поздним версиям реализации, если это необходимо, и не нарушать API).
Так что это не общая проблема с OO, это специфическая для языка: поддерживает ли данный язык конструкцию, подобную свойству. Python делает.
+1 .. любите ответ ... особенно там, где вы сказали: «Зачем взвесить язык с помощью механизма принуждения?» – Perpetualcoder
Комментарий к языкам .NET - false. Переход от поля к свойству является изменением API. – porges
@Porges Вы имеете в виду на уровне байт-кода, правильно? – fredoverflow