В чем преимущество частного имени в Python?
Python предоставляет личное имя mangling для методов и атрибутов класса.
Существуют ли какие-либо конкретные случаи, когда эта функция требуется, или это просто перенос с Java и С++?
Просьба описать прецедент, в котором должно использоваться кодирование имени Python, если оно есть?
Кроме того, меня не интересует случай, когда автор просто пытается предотвратить случайный доступ внешних атрибутов. Я считаю, что этот пример использования не согласован с моделью программирования Python.
Ответы
Ответ 1
Отчасти для предотвращения случайного доступа к внутреннему атрибуту. Вот пример:
В вашем коде, который является библиотекой:
class YourClass:
def __init__(self):
self.__thing = 1 # Your private member, not part of your API
В моем коде, в котором я наследую ваш класс библиотеки:
class MyClass(YourClass):
def __init__(self):
# ...
self.__thing = "My thing" # My private member; the name is a coincidence
Без частного имени, мое случайное повторное использование вашего имени нарушит вашу библиотеку.
Ответ 2
От PEP 8:
Если ваш класс предназначен для подкласса, и у вас есть атрибуты, которые вы не хотите использовать подклассами, подумайте об их названии с двойными лидирующими знаками подчеркивания и отсутствующими символами подчеркивания. Это вызывает алгоритм управления именами Python, где имя класса искажается именем атрибута. Это помогает избежать конфликтов имен атрибутов, если подклассы непреднамеренно содержат атрибуты с тем же именем.
(добавлен акцент)
Ответ 3
Для предотвращения случайного доступа к внешнему атрибуту используется манипуляция имени. В основном, там, чтобы убедиться, что нет конфликтов имен.