Получение списка методов класса в Python: решение

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы получить список методов класса в Python, исключая специальные методы, используйте модуль inspect:

Python
Скопировать код
import inspect

class MyClass:
    def chicken_nuggets(self): pass
    def french_fries(self): pass

methods = [m[0] for m in inspect.getmembers(MyClass, predicate=inspect.isfunction)]
print(methods)

Вывод:

['chicken_nuggets', 'french_fries']
Кинга Идем в IT: пошаговый план для смены профессии

Методы класса и методы экземпляра

Чтобы получить методы экземпляра, используйте объект класса:

Python
Скопировать код
instance = MyClass()
instance_methods = [m[0] for m in inspect.getmembers(instance, predicate=inspect.ismethod)]

Для методов класса передайте сам класс:

Python
Скопировать код
class_methods = [m[0] for m in inspect.getmembers(MyClass, predicate=inspect.isfunction)]

Обратите внимание, что в Python 3 поведение inspect.ismethod отличается!

Приватные и специальные методы

Используйте dir(), чтобы найти все методы, включая приватные и специальные (с двойными подчеркиваниями):

Python
Скопировать код
all_methods = [method for method in dir(MyClass) if callable(getattr(MyClass, method))]

Если нужно исключить специальные методы с __, их можно отфильтровать:

Python
Скопировать код
regular_methods = [method for method in dir(MyClass) if callable(getattr(MyClass, method)) and not method.startswith("__")]

Интересуют статические методы?

Статические методы детектируются отдельно:

Python
Скопировать код
static_methods = [m[0] for m in inspect.getmembers(MyClass, predicate=inspect.isfunction) if isinstance(MyClass.__dict__.get(m[0]), staticmethod)]

Визуализация

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

Markdown
Скопировать код
🧰 = Класс Python
🔨 = Метод 1
🔧 = Метод 2
🪛 = Метод 3

Используя интроспекцию, вы можете увидеть, какие "инструменты" находятся в "ящике":

Python
Скопировать код
tools_in_the_box = [tool for tool in dir(🧰) if callable(getattr(🧰, tool))]
Markdown
Скопировать код
Содержимое ящика с инструментами:
🔨, 🔧, 🪛

Понимание строк документации

"Строки документации" методов помогают лучше понять их назначение:

Python
Скопировать код
for method in methods:
    print(f"Метод: {method}\nДокументация: {inspect.getdoc(getattr(MyClass, method))}\n")

Проверка в реальном времени

Интроспекция отлично справляется с атрибутами в реальном времени, но при этом может влиять на производительность.

Нужна помощь?

Встроенная в Python система интерактивной помощи – это нечто вроде справочной службы. Попробуйте использовать функцию help():

Python
Скопировать код
help(MyClass)  # Здесь начинается диалог с Python 🐍

Полезные материалы

  1. inspect — Инспекция активных объектов — документация Python 3.12.1 — для глубокого понимания модуля inspect.
  2. Встроенные функции — документация Python 3.12.1 — применение функции dir().
  3. Встроенные функции — документация Python 3.12.1 — подробности о функции getattr().
  4. 3. Модель данных — документация Python 3.12.1 — о свойстве dict.
  5. Типы объектов — документация Python 3.12.1 — описание типов объектов.
  6. 3. Модель данных — документация Python 3.12.1 — расположение методов в классах.