Python - dir() - 如何区分函数/方法和简单属性?

时间:2014-11-08 14:16:36

标签: python

dir()返回所有已定义名称的列表,但是尝试调用我看到列出的函数只是为了发现它实际上是一个属性,或尝试访问属性只是为了发现它是令人讨厌的实际上是可赎回的。如何让dir()更具信息性?

4 个答案:

答案 0 :(得分:3)

要显示模块中已定义名称的列表,例如数学模块,以及它们可以执行的类型:

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

getattr(math,name)从math模块返回对象(函数或其他),由变量" name"中的字符串值命名。例如,类型(getattr(数学,' pi'))是' float'

答案 1 :(得分:3)

没有办法让dir提供更丰富的信息。如你所说,但你可以使用callablegetattr函数:

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

显然,功能本身仍属于属性,但你明白了。

答案 2 :(得分:0)

另一种方法是在getmembers中使用inspect功能。你可以通过

获得与詹姆斯一样的结果
from inspect import getmembers

getmembers(obj)  # => ...

有关详细信息,请查看:

https://docs.python.org/2/library/inspect.html#inspect.getmembers

答案 3 :(得分:0)

您可以通过这种方式查看详细信息:

for functions_variables_list in dir( module_name ):
  print(functions_variables_list, type( getattr(module_name, functions_variables_list)))

PS:有关默认功能的详细信息,请参见:dir()type()getattr()