Нахождение каких методов у объекта Python - PullRequest
341 голосов
/ 29 августа 2008

Учитывая объект Python любого вида, есть ли простой способ получить список всех методов, которые имеет этот объект?

Или,

если это невозможно, есть ли хотя бы простой способ проверить, есть ли у него конкретный метод, кроме простой проверки наличия ошибки при вызове метода?

Ответы [ 15 ]

2 голосов
/ 16 сентября 2015

Нет надежного способа перечислить все методы объекта. dir(object) обычно полезно, но в некоторых случаях может не указывать все методы. Согласно dir() документации : "С аргументом попытка вернуть список допустимых атрибутов для этого объекта."

Проверка того, что метод существует, может быть сделана callable(getattr(object, method)), как уже упоминалось там.

2 голосов
/ 24 апреля 2015

Можно создать функцию getAttrs, которая будет возвращать имена вызываемых свойств объекта

def getAttrs(object):
  return filter(lambda m: callable(getattr(object, m)), dir(object))

print getAttrs('Foo bar'.split(' '))

Это вернулось бы

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
 '__delslice__', '__eq__', '__format__', '__ge__', '__getattribute__', 
 '__getitem__', '__getslice__', '__gt__', '__iadd__', '__imul__', '__init__', 
 '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', 
 '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', 
 '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', 
 '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 
 'remove', 'reverse', 'sort']
1 голос
/ 26 марта 2013

... есть, по крайней мере, простой способ проверить, есть ли у него определенный метод, кроме простой проверки, если происходит ошибка при вызове метода

Хотя " Проще просить прощения, чем разрешения ", безусловно, путь Pythonic, то, что вы ищете, может быть:

d={'foo':'bar', 'spam':'eggs'}
if 'get' in dir(d):
    d.get('foo')
# OUT: 'bar'
0 голосов
/ 09 марта 2018

Для поиска определенного метода во всем модуле

for method in dir(module) :
  if "keyword_of_methode" in method :
   print(method, end="\n")
0 голосов
/ 16 января 2018

Взять список как объект

obj = []

list(filter(lambda x:callable(getattr(obj,x)),obj.__dir__()))

Вы получаете:

['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__delitem__',
 '__dir__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__iadd__',
 '__imul__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__reversed__',
 '__rmul__',
 '__setattr__',
 '__setitem__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'append',
 'clear',
 'copy',
 'count',
 'extend',
 'index',
 'insert',
 'pop',
 'remove',
 'reverse',
 'sort']
...