2015-10-18 3 views
4

Что такое« оптимальный »способ перечислить все методы класса данного класса с помощью inspect? Это работает, если я использую inspect.isfunction в качестве предиката в getmembers как такСписок всех членов класса с Python `inspect` module

class MyClass(object): 
    def __init(self, a=1): 
     pass 
    def somemethod(self, b=1): 
     pass 

inspect.getmembers(MyClass, predicate=inspect.isfunction) 

возвращается

[('_MyClass__init', <function __main__.MyClass.__init>), 
('somemethod', <function __main__.MyClass.somemethod>)] 

Но это не должно работать через ismethod?

inspect.getmembers(MyClass, predicate=inspect.ismethod) 

который возвращает пустой список в этом случае. Было бы хорошо, если бы кто-нибудь мог прояснить, что происходит. Я запускал это в Python 3.5.

ответ

8

Как описано в документации, inspect.ismethod покажет связанные методы. Это означает, что вам нужно создать экземпляр класса, если вы хотите проверить его методы. Поскольку вы пытаетесь проверить методы на не-созданный экземпляр класса, вы получаете пустой список.

Если вы:

x = MyClass() 
inspect.getmembers(x, predicate=inspect.ismethod) 

вы получите методы.

+0

Просто проглядела эту часть, спасибо. – Sebastian

Смежные вопросы