Есть ли в Python метод, который возвращает все атрибуты в модуле? - PullRequest
1 голос
/ 15 сентября 2010

Я уже ищу его в Google, но мне не повезло.

Ответы [ 5 ]

7 голосов
/ 15 сентября 2010

в дополнение к упомянутой встроенной функции dir есть модуль inspect, который имеет действительно хороший метод getmembers. В сочетании с pprint.pprint у вас есть мощный комбо

from pprint import pprint
from inspect import getmembers
import linecache

pprint(getmembers(linecache))

пример вывода:

 ('__file__', '/usr/lib/python2.6/linecache.pyc'),
 ('__name__', 'linecache'),
 ('__package__', None),
 ('cache', {}),
 ('checkcache', <function checkcache at 0xb77a7294>),
 ('clearcache', <function clearcache at 0xb77a7224>),
 ('getline', <function getline at 0xb77a71ec>),
 ('getlines', <function getlines at 0xb77a725c>),
 ('os', <module 'os' from '/usr/lib/python2.6/os.pyc'>),
 ('sys', <module 'sys' (built-in)>),
 ('updatecache', <function updatecache at 0xb77a72cc>)

обратите внимание, что в отличие от dir вы увидите фактические значения членов. Вы можете применить фильтры к getmembers, которые похожи на те, которые вы можете применить к dir, они могут быть просто более мощными. Например,

def get_with_attribute(mod, attribute, public=True):
    items = getmembers(mod)
    if public:
       items = filter(lambda item: item[0].startswith('_'), items)
    return [attr for attr, value in items if hasattr(value, attribute]
4 голосов
/ 15 сентября 2010
import module
dir(module)
0 голосов
/ 15 сентября 2010

dir это то, что вам нужно:)

0 голосов
/ 15 сентября 2010

Как было правильно указано, функция dir вернет список со всеми доступными методами в данном объекте.

Если вы вызовете dir() из командной строки, он ответит методами, доступными при запуске. Если вы звоните:

import module
print dir(module)

распечатает список всех доступных методов в модуле module. В большинстве случаев вас интересуют только открытые методы (те, которые предполагается использовать ) - по соглашению частные методы и переменные Python начинаются с __, поэтому я делаю следующее:

import module
for method in dir(module):
 if not method.startswith('_'):
   print method

Таким образом, вы печатаете только публичные методы (чтобы быть уверенным - _ - это всего лишь соглашение, и многие авторы модулей могут не следовать этому соглашению)

0 голосов
/ 15 сентября 2010

Вы ищете dir:

import os
dir(os)

??dir

    dir([object]) -> list of strings

If called without an argument, return the names in the current scope.
Else, return an alphabetized list of names comprising (some of) the attributes
of the given object, and of attributes reachable from it.
If the object supplies a method named __dir__, it will be used; otherwise
the default dir() logic is used and returns:
  for a module object: the module's attributes.
  for a class object:  its attributes, and recursively the attributes
    of its bases.
  for any other object: its attributes, its class's attributes, and
    recursively the attributes of its class's base classes.
...