Получение списка методов класса в Python: решение
Быстрый ответ
Чтобы получить список методов класса в Python, исключая специальные методы, используйте модуль inspect
:
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']
Методы класса и методы экземпляра
Чтобы получить методы экземпляра, используйте объект класса:
instance = MyClass()
instance_methods = [m[0] for m in inspect.getmembers(instance, predicate=inspect.ismethod)]
Для методов класса передайте сам класс:
class_methods = [m[0] for m in inspect.getmembers(MyClass, predicate=inspect.isfunction)]
Обратите внимание, что в Python 3 поведение inspect.ismethod
отличается!
Приватные и специальные методы
Используйте dir()
, чтобы найти все методы, включая приватные и специальные (с двойными подчеркиваниями):
all_methods = [method for method in dir(MyClass) if callable(getattr(MyClass, method))]
Если нужно исключить специальные методы с __
, их можно отфильтровать:
regular_methods = [method for method in dir(MyClass) if callable(getattr(MyClass, method)) and not method.startswith("__")]
Интересуют статические методы?
Статические методы детектируются отдельно:
static_methods = [m[0] for m in inspect.getmembers(MyClass, predicate=inspect.isfunction) if isinstance(MyClass.__dict__.get(m[0]), staticmethod)]
Визуализация
Всегда полезно представить класс Python в виде ящика с инструментами, где каждый инструмент – это метод:
🧰 = Класс Python
🔨 = Метод 1
🔧 = Метод 2
🪛 = Метод 3
Используя интроспекцию, вы можете увидеть, какие "инструменты" находятся в "ящике":
tools_in_the_box = [tool for tool in dir(🧰) if callable(getattr(🧰, tool))]
Содержимое ящика с инструментами:
🔨, 🔧, 🪛
Понимание строк документации
"Строки документации" методов помогают лучше понять их назначение:
for method in methods:
print(f"Метод: {method}\nДокументация: {inspect.getdoc(getattr(MyClass, method))}\n")
Проверка в реальном времени
Интроспекция отлично справляется с атрибутами в реальном времени, но при этом может влиять на производительность.
Нужна помощь?
Встроенная в Python система интерактивной помощи – это нечто вроде справочной службы. Попробуйте использовать функцию help()
:
help(MyClass) # Здесь начинается диалог с Python 🐍
Полезные материалы
- inspect — Инспекция активных объектов — документация Python 3.12.1 — для глубокого понимания модуля inspect.
- Встроенные функции — документация Python 3.12.1 — применение функции dir().
- Встроенные функции — документация Python 3.12.1 — подробности о функции getattr().
- 3. Модель данных — документация Python 3.12.1 — о свойстве dict.
- Типы объектов — документация Python 3.12.1 — описание типов объектов.
- 3. Модель данных — документация Python 3.12.1 — расположение методов в классах.