【问题标题】:Python: listing callable objects?Python:列出可调用对象?
【发布时间】:2012-07-22 02:21:41
【问题描述】:

我试图只列出可调用对象,但我似乎做错了什么。例如,

>>> [m for m in dir({}) if callable(getattr({},m))]
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

但是,这是错误的,例如{}.__doc__ 显然是一个字符串等。我的列表理解有什么问题

【问题讨论】:

  • 根据Built-in Functions - callable,你不应该相信函数的True返回值,因为它可以为不可调用的对象返回True。但是,如果它返回 False,它肯定是不可调用的。
  • 顺便说一下,您的列表理解只返回 Python 2.7 中的可调用对象。我没有收到__doc__
  • 您说“这是错误的”并提及__doc__,但您的列表不包括__doc__
  • 这很尴尬 - 我没有注意到。您列表中的所有项目实际上都是可调用的,@yayu
  • 如果你想要一些不同的东西,比如一个类的所有方法,你可以用inspect做得更好。

标签: python callable


【解决方案1】:

您编写的代码是 Python 所能提供的最好的。由于__doc__,您提到它是错误的,但您的列表不包括__doc__。我想你已经有了工作代码。

【讨论】:

    猜你喜欢
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2016-05-26
    • 2012-12-06
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多