Как в Python получить список методов объекта?

«Как в Python получить список методов объекта?» — вопрос из категории ООП, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для интроспекции объекта в Python и получения списка его атрибутов, включая методы, используется встроенная функция dir().

Однако dir() возвращает имена всех атрибутов (полей, методов, служебных атрибутов). Чтобы отфильтровать только методы, необходимо дополнительно проверить, является ли атрибут вызываемым (callable).

Пример:

class MyClass:
    my_attribute = 42

    def my_method(self):
        """Это публичный метод."""
        pass

    def _internal_method(self):
        pass

instance = MyClass()

# 1. Получить все атрибуты и методы
# print(dir(instance))
# Вывод будет содержать '__class__', 'my_attribute', 'my_method' и др.

# 2. Получить только пользовательские методы
methods = [method_name for method_name in dir(instance)
           if callable(getattr(instance, method_name)) and not method_name.startswith('__')]

print(methods)
# Вывод: ['_internal_method', 'my_method']

Дополнительные инструменты

  • help(instance): Выводит подробную справку по объекту, включая документацию методов.
  • inspect.getmembers(instance, inspect.ismethod): Более строгий способ из модуля inspect, который вернет пары (имя, объект_метода).
  • instance.__dict__: Словарь, содержащий только атрибуты, принадлежащие экземпляру, а не его классу.