в дополнение к упомянутой встроенной функции 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]