Ответ
Одиночное ведущее подчеркивание (_) в имени метода или атрибута (например, _my_variable) является соглашением в Python, которое указывает, что этот член класса предназначен для внутреннего использования.
Это не синтаксическое правило, а рекомендация для других программистов. Оно говорит: «Этот атрибут/метод является частью внутренней реализации класса и может измениться в будущих версиях. Не полагайтесь на него в своем коде».
Основные характеристики:
- Нет ограничения доступа: Вы по-прежнему можете получить доступ к
obj._protected_method()извне класса. Интерпретатор не выдаст ошибку. - Влияние на импорт: Имена, начинающиеся с
_, не импортируются при использованииfrom module import *. Это помогает избежать загрязнения пространства имен. - Поддержка IDE: Современные IDE и линтеры обычно подсвечивают использование таких членов класса извне как потенциальную проблему.
Пример:
class DatabaseConnector:
def __init__(self, connection_string):
self.public_connection_string = connection_string
self._connection = None # Внутренний атрибут
def _connect(self):
# Логика подключения, которая не должна быть публичной
print(f"Подключение к {self.public_connection_string}...")
self._connection = "<Объект подключения>"
print("Подключено!")
def execute_query(self, query):
# Публичный метод, который использует внутреннюю логику
if not self._connection:
self._connect()
print(f"Выполнение запроса: '{query}' с использованием {self._connection}")
db = DatabaseConnector("user:pass@host/db")
# Правильное использование - через публичный API
db.execute_query("SELECT * FROM users")
# Неправильное использование - прямой вызов внутреннего метода
# Хотя это и работает, так делать не следует
db._connect()