Функции и переменные, начинающиеся с одиночного или двойного подчеркивания

Я видел функции и переменные, начинающиеся с символов подчеркивания на разных языках программирования (PHP и Python), и я смущен о значении, стоящем за ним.

Предполагая, что обычные правила используются в PHP:

  • одно подчеркивание обозначает защищенную переменную или метод
  • двойное подчеркивание указывает переменную или метод частного члена

Это связано с тем, что у PHP была слабая поддержка ООП и у нее не было концепции частной и защищенной (все было публично). Это соглашение разрешало разработчикам указывать переменную-член или метод был приватным или защищенным, чтобы лучше сообщать об этом пользователям кода.

Однако пользователи могли бы игнорировать эту семантику и, если хотите, выбрать «частные» и «защищенные» переменные и методы.

Единственное подчеркивание не имеет особого значения для атрибутов class / instance в Python. По соглашению он указывает частные переменные / функцию. from module import * не будет импортировать функции и переменные, начиная с одного подчеркивания. (спасибо Би Рико).

double underscore вызывает имя mangling . Это позволяет классам иметь атрибут, отличный от одного с тем же именем в своих подклассах.