ключевого слова vars
дает мне все переменные в примере, например:найти все члены экземпляра в питона, за исключением __init__
In [245]: vars(a)
Out[245]: {'propa': 0, 'propb': 1}
Однако я не известно ни об одном решении перечислить все вызываемые члены, которые определены в моем классе (смотрите, например, здесь: Finding what methods an object has), я добавил это простое улучшение, которые исключают __init__
:
In [244]: [method for method in dir(a) if callable(getattr(a, method)) and not method.startswith('__')]
Out[244]: ['say']
Сравните:
In [243]: inspect.getmembers(a)
Out[243]:
[('__class__', __main__.syncher),
('__delattr__',
<method-wrapper '__delattr__' of syncher object at 0xd6d9dd0>),
('__dict__', {'propa': 0, 'propb': 1}),
('__doc__', None),
...snipped ...
('__format__', <function __format__>),
('__getattribute__',
<method-wrapper '__getattribute__' of syncher object at 0xd6d9dd0>),
('__hash__', <method-wrapper '__hash__' of syncher object at 0xd6d9dd0>),
('__init__', <bound method syncher.__init__ of <__main__.syncher object at 0xd6d9dd0>>),
('__module__', '__main__'),
('__setattr__',
<method-wrapper '__setattr__' of syncher object at 0xd6d9dd0>),
('__weakref__', None),
('propa', 0),
('propb', 1),
('say', <bound method syncher.say of <__main__.syncher object at 0xd6d9dd0>>)]
или, например:
In [248]: [method for method in dir(a) if callable(getattr(a, method))
and isinstance(getattr(a, method), types.MethodType)]
Out[248]: ['__init__', 'say']
и я нашел этот метод, который исключает встроенные процедуры:
In [258]: inspect.getmembers(a, predicate=inspect.ismethod)
Out[258]:
[('__init__',
<bound method syncher.__init__ of <__main__.syncher object at 0xd6d9dd0>>),
('say', <bound method syncher.say of <__main__.syncher object at 0xd6d9dd0>>)]
Итак, мой вопрос: у вас есть лучше способ найти все методы внутри класса (исключая __init__
и все встроенные методы) в Python 2.7.X?
Это решение выглядит довольно элегантно для меня, это производительность не соответствует вашим потребностям? в противном случае, я бы сказал, придерживайтесь этого. – coder543
@ coder543, у меня нет проблем с производительностью. Я просто задавался вопросом, был ли мой поиск «Python Zen» ;-) – Oz123