Вы можете использовать начальное подчеркивание в названии, чтобы сообщить читателям кода, что рассматриваемое имя является внутренней деталью, и они не должны полагаться на него, оставаясь в будущих версиях. Такое соглашение действительно все, что вам нужно - зачем утяжелять язык с помощью механизма принуждения?
Данные, как и методы, должны быть открытыми (именоваться без начального подчеркивания), если они являются частью разработанного API вашего класса, который вы намерены поддерживать в будущем. В C ++ или Java это вряд ли произойдет, потому что, если вы хотите изменить элемент данных на метод доступа, вам не повезло - вам придется сломать свой API, и каждому клиенту класса придется изменить.
В Python и других языках, поддерживающих property
-подобную конструкцию, это не так - вы всегда можете заменить элемент данных свойством, которое прозрачно вызывает методы доступа, API-интерфейс не изменяется, а также клиентский код , Итак, в Python и других языках с property
-подобными конструкциями (я считаю, что языки .NET похожи на уровне исходного кода, хотя и не обязательно на уровне байт-кода), вы также можете оставить свои данные открытыми, когда они являются частью API и никакие средства доступа в настоящее время не нужны (вы всегда можете добавить методы доступа в более поздние выпуски реализации, если это необходимо, и не нарушать API).
Так что на самом деле это не общая проблема ОО, это зависит от языка: поддерживает ли данный язык конструкцию, подобную свойствам. Python делает.