2015-10-18 39 views
4

什麼是使用inspect來列出給定類的所有類方法的「最優」方法?它的工作原理,如果我使用inspect.isfunction作謂語在getmembers像這樣使用Python`inspect`模塊列出所有類成員

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

相關問題