Как реализовать внутренние и внешние методы в классе?

Внутренние методы (private):

Начинаются с одного или двух символов подчеркивания (_ или __). Python не делает их по-настоящему private, но это соглашение указывает, что их не следует вызывать напрямую извне класса. Например: def _internal_method(self): ...

Внешние методы (public):

Это обычные методы класса, не начинающиеся с символа подчеркивания. Они предназначены для использования вне класса и составляют public API. Например: def public_method(self): ...

Пример:
  
class MyClass:
    def _internal_method(self):
        print("Это внутренний метод")

    def public_method(self):
        print("Это внешний метод")
        self._internal_method()

obj = MyClass()
obj.public_method()  # Допустимо
# obj._internal_method() # Не рекомендуется, хотя и возможно
  
  

В Python различие между "внутренними" и "внешними" методами обеспечивается конвенциями об именовании и применением модификаторов доступа (хотя Python не имеет строгих приватных методов, как, например, в Java или C++).

Внешние методы (public): Это методы, которые предназначены для использования извне класса. Их можно вызывать через экземпляр класса. Имена таких методов обычно не начинаются с символа подчеркивания.

Внутренние методы (protected/private):

  • Protected (защищенные): Имена методов начинаются с одного символа подчеркивания (_method_name). Это конвенция, указывающая, что метод предназначен для использования внутри самого класса и его подклассов. Несмотря на это, их можно вызвать извне, но это считается дурным тоном и может нарушить структуру класса.
  • Private (приватные): Имена методов начинаются с двух символов подчеркивания (__method_name). Python использует name mangling для таких методов. Это означает, что имя метода изменяется, добавляя к нему имя класса с символом подчеркивания в начале (например, для класса MyClass метод __method_name будет преобразован в _MyClass__method_name). Это затрудняет вызов метода извне напрямую, но не делает это невозможным. Приватные методы предназначены для использования только внутри самого класса.

Пример:


class MyClass:
    def public_method(self):
        """Этот метод предназначен для использования извне класса."""
        print("Public method called")
        self._protected_method()
        self.__private_method()

    def _protected_method(self):
        """Этот метод предназначен для использования внутри класса и его подклассов."""
        print("Protected method called")

    def __private_method(self):
        """Этот метод предназначен только для использования внутри класса."""
        print("Private method called")

# Использование
my_object = MyClass()
my_object.public_method() # Корректно

# Обратите внимание, что следующее не рекомендуется и может нарушить инкапсуляцию
# my_object._protected_method() # Работать будет, но не рекомендуется
# my_object._MyClass__private_method() # Работать будет, но крайне не рекомендуется

  

Важно: В Python нет строгой приватности или защиты. Все основано на конвенциях. Программист должен следовать этим конвенциям, чтобы обеспечить правильное использование и поддержку кода.

0