В чем преимущество частного имени в 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

Для предотвращения случайного доступа к внешнему атрибуту используется манипуляция имени. В основном, там, чтобы убедиться, что нет конфликтов имен.