Начинаются с одного или двух символов подчеркивания (_ или __).  Python не делает их по-настоящему private, но это соглашение указывает, что их не следует вызывать напрямую извне класса.  Например: def _internal_method(self): ...
Это обычные методы класса, не начинающиеся с символа подчеркивания. Они предназначены для использования вне класса и составляют 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):
_method_name).  Это конвенция, указывающая, что метод предназначен для использования внутри самого класса и его подклассов.  Несмотря на это, их можно вызвать извне, но это считается дурным тоном и может нарушить структуру класса.__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 нет строгой приватности или защиты. Все основано на конвенциях. Программист должен следовать этим конвенциям, чтобы обеспечить правильное использование и поддержку кода.