我想在Python中编写一个小函数来打印Object的每个可调用方法。在REPL中我会这样做以获得每个列表方法:
[x for x in dir([]) if '__' not in x]
这在REPL中工作正常,但是当我在类似的模块中编写相同的理解时:
def methods(obj):
return [x for x in dir(obj) if '__' not in x]
我收到错误: " TypeError:dir()不带参数(给定1个)。" 问题出在哪儿?为什么在REPL中编写它而不是在模块中写它是完全正确的?
答案 0 :(得分:3)
您可能会覆盖原生dir
功能。
尝试help(dir)
查看其来源。
还注意到inspect
完全符合您的要求:
import inspect
inspect.getmembers(obj, predicate=inspect.ismethod)