Если я использую одно знаковое подчеркивание для атрибута в классе, было бы ошибкой обращаться к нему с другого объекта? Является ли одно подчеркивание «Я буду использовать это, как мне заблагорассудится, но вы не должны его трогать», или даже разработчик относится к нему так, как если бы он был закрыт?Должен ли я рассматривать свои собственные одиночные атрибуты как частные?
ответ
Я думаю, вы должны воздерживаться от этого настолько, насколько это возможно, потому что оно разрушает инкапсуляцию, которая является одним из преимуществ объектно-ориентированной парадигмы. Хотя некоторые считают, что это нормально, как определенные более высокие уровни охвата, скажем, модуль или пакет, я обнаружил, что не делаю этого полезного правила даже в рамках различных методов одного класса - по крайней мере, если он довольно сложный, тонкий , или просто аспект, который, я думаю, мне захочется изменить позже.
Причина в том, что каждый раз, когда вы что-то делаете с этим, вы создаете зависимость между внутренними объектами и где вы кодируете, будь то другая часть того же объекта или модуля или что-то еще. Чем больше этого будет, тем сложнее будет поддерживать или улучшать вещи.
Другим аспектом, который следует учитывать, является тот факт, что всякий раз, когда вы чувствуете необходимость в этом, он может указывать на необходимость лучшего дизайна, в результате которого вы можете обработать его предупреждающим знаком и соответствующим образом отреагировать.
Создание интерфейса для выполнения операций, связанных с внутренними деталями, часто означает необходимость разработки и реализации большего количества кода, чем это не было бы. Поэтому в каждом случае выгоды должны быть сопоставлены с затратами, чтобы определить, стоит ли это. В конечном итоге опыт (и образование, если он продолжается) делает такие решения легче, возможно, даже инстинктивными.
Подчеркнутое подчеркивание означает, что оно не для общественное потребление; код в том же пакете можно ткнуть и подталкивать.
- 1. Как создать свои собственные атрибуты (HTML5)
- 2. Должен ли я писать свои собственные Исключения? - Java
- 3. Должен ли я использовать свои собственные typedefs в вызовах библиотеки?
- 4. Во время нормализации данных я могу добавить свои собственные атрибуты?
- 5. Где должен класс освобождать свои частные переменные?
- 6. Можно ли добавить свои собственные атрибуты в HTML-элементы?
- 7. Должен ли я потребовать свои собственные пакеты в качестве зависимости, или я должен просто включить их?
- 8. Должен ли я проставлять свои угловые директивы?
- 9. Должен ли я рассматривать Portable Class Libraries?
- 10. Должен ли я рассматривать LINQ для объектов?
- 11. В Доктрине, где я должен поместить свои собственные методы?
- 12. Должен ли дочерний виджет обрабатывать свои собственные события?
- 13. Должен ли объект обрабатывать свои собственные действия/логику?
- 14. Когда я должен использовать свои собственные пространства имен?
- 15. Разрешить пользователям создавать свои собственные атрибуты в шаблонизированной модели
- 16. Могу ли я создать свои собственные типы ввода html5?
- 17. MSpec, что я должен помещать в свои атрибуты [Subject()]?
- 18. Должен ли я рассматривать значения rgb пикселя как одно значение?
- 19. Должен ли я рассматривать следующий код как безопасный поток?
- 20. Как вставлять свои собственные видео?
- 21. Могу ли я использовать свои собственные HTML-файлы с OpenCart?
- 22. Могу ли я объединить свои собственные структуры данных с JAXB?
- 23. Должен ли я тестировать свои контроллеры (MVC)?
- 24. Должен ли я подписывать свои DLL-файлы?
- 25. Как изменить собственные атрибуты
- 26. Могу ли я добавить свои собственные классы в структуру сущностей?
- 27. Должен ли я документировать свои личные методы?
- 28. Как создать свои собственные переключатели
- 29. Как создать свои собственные команды
- 30. Могу ли я определить свои собственные формы символов в ncurses?
Я думаю, что это то, что я обычно делаю. Обычно я никогда не нарушаю инкапсуляцию таким образом, но в этом случае мой код будет намного сложнее, поэтому я получаю доступ к атрибуту с одним подчеркиванием вне класса. –
@MikeVella: Все в порядке, я не говорю, что никто никогда не должен этого делать, только то, что различные компромиссы рассматриваются (и понимаются) в контексте того, что вы делаете. Кроме того, Python позволяет немного легче, чем некоторые языки, возвращаться позже и модифицировать что-то - добавлением дескрипторов, например. – martineau