Имеется ли какой-либо объект Python любого типа, есть ли простой способ получить список всех методов, которые есть у этого объекта?
Или,
если это невозможно, есть ли хотя бы простой способ проверить, есть ли у него конкретный метод, кроме простой проверки, возникает ли ошибка при вызове метода?
python
introspection
Томас Лётцер
источник
источник
Ответы:
Для многих объектов вы можете использовать этот код, заменив «объект» на интересующий вас объект:
Я обнаружил это на diveintopython.net (сейчас в архиве). Надеюсь, это должно предоставить некоторые дополнительные детали!
Если вы получили
AttributeError
, вы можете использовать это вместо :getattr(
нетерпим к абстрактным виртуальным подклассам Python3.6. Этот код делает то же, что и выше, и игнорирует исключения.источник
print [method for method in dir(object) if callable(getattr(object, method))]
.AttributeError: module 'pandas.core.common' has no attribute 'AbstractMethodError'
когда я пытаюсь запустить это. Подробнее см. На stackoverflow.com/q/54713287/9677043 .Вы можете использовать встроенную
dir()
функцию, чтобы получить список всех атрибутов, которые имеет модуль. Попробуйте это в командной строке, чтобы увидеть, как это работает.Кроме того, вы можете использовать
hasattr(module_name, "attr_name")
функцию, чтобы узнать, имеет ли модуль определенный атрибут.См. Руководство по интроспекции Python для получения дополнительной информации.
источник
hasattr
помог мой вариант использования, чтобы найти, есть ли у объекта Python конкретная переменная-член или метод.Самый простой способ заключается в использовании
dir(objectname)
. Он отобразит все методы, доступные для этого объекта. Прикольный трюк.источник
AttributeError: module 'pandas.core.common' has no attribute 'AbstractMethodError'
. Любые идеи? См. Deets по адресу stackoverflow.com/q/54713287/9677043 . +1 к @Pawan Kumar b / c ответ работает, а к @ljs - обещание отфильтрованного списка только методов.Чтобы проверить, есть ли у него определенный метод:
источник
if hasattr(obj,method) and callable(getattr(obj,method)):
Я считаю, что вы хотите что-то вроде этого:
По моему скромному мнению, встроенная функция
dir()
может сделать эту работу за вас. Взято изhelp(dir)
вывода на вашей оболочке Python:Например:
Пока я проверял вашу проблему, я решил продемонстрировать свой ход мыслей с лучшим форматированием вывода
dir()
.dir_attributes.py (Python 2.7.6)
dir_attributes.py (Python 3.4.3)
Надеюсь, что я внес свой вклад :).
источник
Помимо более прямых ответов, я был бы упущен, если бы не упомянул iPython . Нажмите «Tab», чтобы увидеть доступные методы с автозаполнением.
И как только вы нашли метод, попробуйте:
чтобы увидеть pydocs, подпись метода и т. д.
Ааа ... REPL .
источник
Если вы конкретно хотите методы , вы должны использовать inspect.ismethod .
Для имен методов:
Для самих методов:
Иногда это
inspect.isroutine
может быть полезно (для встроенных модулей, расширений C, Cython без директивы компилятора «binding»).источник
inspect.getmembers
вместо использованияdir
в понимании списка?Откройте командную оболочку (Ctrl + Alt + T в Ubuntu). Запустите в нем оболочку python3. Создать объект для наблюдения за методами. Просто добавьте точку после нее и дважды нажмите «tab», и вы увидите что-то вроде этого:
источник
ipython
, начать набирать объект и нажать,tab
и он тоже будет работать. Не требуется никаких настроек readlineПроблема всех указанных здесь методов заключается в том, что вы НЕ МОЖЕТЕ быть уверены, что метод не существует.
В Python вы можете перехватить точку, вызывающую через
__getattr__
и__getattribute__
, позволяющую создавать метод «во время выполнения»Exemple:
Если вы выполните его, вы можете вызвать метод, не существующий в словаре объектов ...
И именно поэтому вы используете « Проще», чтобы просить прощения, чем парадигмы разрешений в Python.
источник
Самый простой способ получить список методов любого объекта - использовать
help()
команду.В нем будут перечислены все доступные / важные методы, связанные с этим объектом.
Например:
источник
%
в первом примере? Это не работает в моем Python 2.7.Это должно работать :)
источник
Можно создать
getAttrs
функцию, которая будет возвращать имена вызываемых свойств объектаЭто вернется
источник
Не существует надежного способа перечислить все методы объекта.
dir(object)
обычно полезно, но в некоторых случаях может не перечислять все методы. Согласноdir()
документации : «С аргументом попытайтесь вернуть список допустимых атрибутов для этого объекта».Проверка того, что метод существует, может быть выполнена
callable(getattr(object, method))
как уже упоминалось там.источник
Взять список в качестве объекта
list(filter(lambda x:callable(getattr(obj,x)),obj.__dir__()))
Ты получаешь:
источник
В то время как « Проще просить прощения, чем разрешения » - это, конечно, путь Pythonic, возможно, то, что вы ищете:
источник
Для поиска определенного метода во всем модуле
источник
Если вы, например, используете shell plus, вы можете использовать это вместо:
таким образом, с "??" сразу после вашего объекта он покажет вам все атрибуты / методы, которые есть у класса.
источник