2014-11-08 28 views
2

dir()返回所有已定義名稱的列表,但嘗試調用我看到列出的函數是爲了發現它實際上是一個屬性,或嘗試訪問某個屬性而僅發現它實際上是一個可調用的函數,這令人討厭。我如何獲得dir()以提供更多信息?Python - dir() - 如何區分函數/方法和簡單屬性?

+5

'ATTRS = [一對的dir(obj)如果不贖回(a)]'和'funcs = [a如果可調用(a),則爲dir(obj)]' – 2014-11-08 14:20:45

+1

@ChinmayKanchi這不起作用--dir給出了字符串。 – 2014-11-08 14:59:27

+0

對不起,'attrs = [一個在目錄(obj)如果不可調用(getattr(obj,a))]' – 2014-11-08 15:19:33

回答

2

要顯示模塊中的定義名稱的列表,例如數學模塊,以及它們的類型,你可以這樣做:

[(name,type(getattr(math,name))) for name in dir(math)] 

GETATTR(數學,名)返回對象(功能,或以其他方式)來自數學模塊,由變量「name」中的字符串值命名。例如,鍵入(GETATTR(數學,「P1」))是「浮動」

2

沒有一種方法,使dir「更多的信息」爲你穿上它,但你可以使用callablegetattr功能:

[(a, 'func' if callable(getattr(obj, a)) else 'attr') for a in dir(obj)] 

明顯功能仍然屬性本身,而是你的想法。