Есть ли в Python функция для перечисления атрибутов и методов конкретного объекта? - PullRequest
38 голосов
/ 26 марта 2009

Есть ли в Python функция для перечисления атрибутов и методов конкретного объекта?

Что-то вроде:

ShowAttributes ( myObject )

   -> .count
   -> .size

ShowMethods ( myObject )

   -> len
   -> parse

Ответы [ 5 ]

51 голосов
/ 26 марта 2009

Вы хотите взглянуть на функцию dir():

>>> li = []
>>> dir(li)      
['append', 'count', 'extend', 'index', 'insert',
'pop', 'remove', 'reverse', 'sort']

li - это список, поэтому dir(li) возвращает список всех методов списка. Обратите внимание, что возвращаемый список содержит имена методов в виде строк, а не сами методы.


Изменить в ответ на комментарий:

Нет, это также покажет все унаследованные методы. Рассмотрим этот пример:

test.py:

class Foo:
    def foo(): pass

class Bar(Foo):
    def bar(): pass

Переводчик Python:

>>> from test import Foo, Bar
>>> dir(Foo)
['__doc__', '__module__', 'foo']
>>> dir(Bar)
['__doc__', '__module__', 'bar', 'foo']

Обратите внимание, что Документация Python гласит:

Примечание: Поскольку dir() поставляется прежде всего для удобства использования при интерактивное приглашение , оно пытается предоставить интересный набор имен больше, чем он пытается поставить строго или последовательно определенный набор имен, и его подробное поведение может меняться в зависимости от версии . За Например, атрибуты метакласса не являются в списке результатов, когда аргумент это класс.

Поэтому использование в вашем коде небезопасно. Вместо этого используйте vars(). Vars() не содержит информацию о суперклассах, вам придется собирать их самостоятельно.


Если вы используете dir() для поиска информации в интерактивном переводчике, рассмотрите возможность использования help().

12 голосов
/ 26 марта 2009

Вам не подходят dir () и vars ()?

10 голосов
/ 26 марта 2009

и для более удобочитаемого способа вы можете использовать см. :

In [1]: from see import see
In [2]: x = "hello world!"
In [3]: see(x)
Out[3]: 
  []   in   +   *   %   <   <=   ==   !=   >   >=   hash()   help()   len()
  repr()   str()   .capitalize()   .center()   .count()   .decode()
  .encode()   .endswith()   .expandtabs()   .find()   .format()   .index()
  .isalnum()   .isalpha()   .isdigit()   .islower()   .isspace()   .istitle()
  .isupper()   .join()   .ljust()   .lower()   .lstrip()   .partition()
  .replace()   .rfind()   .rindex()   .rjust()   .rpartition()   .rsplit()
  .rstrip()   .split()   .splitlines()   .startswith()   .strip()
  .swapcase()   .title()   .translate()   .upper()   .zfill()
2 голосов
/ 26 марта 2009

Еще один способ сделать это - изящная среда IPython . Это позволяет завершить вкладку, чтобы найти все методы и поля объекта.

1 голос
/ 04 марта 2017

Меня удивляет, что никто не упомянул объектную функцию python:
keys()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...