Режимы доступа public, protected, private.
Python ProgaКак мы знаем, мы можем создать класс, а затем обращаться к его атрибутам и методам извне. Например:

Но давайте теперь рассмотрим этот класс:

И теперь при запуске кода мы получим ошибку:

Мы же создали атрибут, но почему возникает исключение? Давайте разберемся.
Всего в Python есть 3 режима доступа:
- public
- protected
- private
Теперь давайте посмотрим как выглядят атрибуты с разными режимами доступа:
- public - name
- protected - _name
- private - __name
Как мы поняли из примера, если название атрибута начинается с буквы, то у него режим доступа public, если с одного нижнего нижнего подчеркивания то режим доступа protected и если с двух нижних подчеркиваний, то режим доступа private.
Теперь давайте разберемся для чего нужны эти режимы доступа:
- Режим доступа public (name) - для обращения извне, внутри класса и во всех его дочерних классах
- Режим доступа protected (_name) - служит для обращения внутри класса и во всех его дочерних классах
- Режим доступа private (__name) - служит для обращения только внутри класса
И если к атрибутам с первыми двумя режимами доступа мы можем обратиться извне (к атрибуту с режимом доступа protected лучше не обращаться извне, не зря же программист начал его с нижнего подчеркивания):

То к атрибуту с режимом доступа private мы НЕ можем обратиться извне:

Но можем получить доступ к нему ВНУТРИ КЛАССА:

Но на самом деле, получить доступ в атрибуту с режимом доступа private можно и извне. Для этого нужно обратиться к атрибуту класса со следующем именем - _<название класса>__<название атрибута>. Например:

НО к атрибутам с режимом доступа protected и private извне лучше вообще не обращаться, несмотря на то, что это возможно.
И забыл сказать, тоже самое работает и с функциями:

Т.е у функций тоже есть три режима доступа (public, protected, private)