【问题标题】:Is there a function in Python to list the attributes and methods of a particular object?Python中有一个函数可以列出特定对象的属性和方法吗?
【发布时间】:2010-10-15 19:02:07
【问题描述】:

Python中有没有列出特定对象的属性和方法的函数?

类似:

ShowAttributes ( myObject )

   -> .count
   -> .size

ShowMethods ( myObject )

   -> len
   -> parse

【问题讨论】:

标签: python


【解决方案1】:

你想看看dir()函数:

>>> li = []
>>> dir(li)      
['append', 'count', 'extend', 'index', 'insert',
'pop', 'remove', 'reverse', 'sort']

li 是一个列表,所以dir(li) 返回一个列表中所有方法的列表。请注意,返回的列表包含字符串形式的方法名称,而不是方法本身。


根据评论进行编辑:

不,这也会显示所有继承的方法。考虑这个例子:

test.py:

class Foo:
    def foo(): pass

class Bar(Foo):
    def bar(): pass

Python 解释器:

>>> from test import Foo, Bar
>>> dir(Foo)
['__doc__', '__module__', 'foo']
>>> dir(Bar)
['__doc__', '__module__', 'bar', 'foo']

您应该注意 Python's documentation 声明:

注意:因为提供了dir() 主要是为了方便在 一个交互式提示,它会尝试 提供一组有趣的名称 不仅仅是它试图提供一个 严格或一致定义的集合 名称、及其详细行为 可能会因版本而异。为了 例如,元类属性不是 在结果列表中当参数 是一个类。

因此,在您的代码中使用它是不安全的。请改用vars()Vars() 不包含有关超类的信息,您必须自己收集它们。


如果您使用dir() 在交互式解释器中查找信息,请考虑使用help()

【讨论】:

  • 另外这里只是列出了直接适用于这个对象类型的方法,而不是它的父类或者父类的父类,对吧?
  • 再次感谢,但它是否也打印对象的属性?
【解决方案2】:

dir() 和 vars() 不适合你吗?

【讨论】:

【解决方案3】:

对于更易于阅读的方式,您可以使用see

In [1]: from see import see
In [2]: x = "hello world!"
In [3]: see(x)
Out[3]: 
  []   in   +   *   %   <   <=   ==   !=   >   >=   hash()   help()   len()
  repr()   str()   .capitalize()   .center()   .count()   .decode()
  .encode()   .endswith()   .expandtabs()   .find()   .format()   .index()
  .isalnum()   .isalpha()   .isdigit()   .islower()   .isspace()   .istitle()
  .isupper()   .join()   .ljust()   .lower()   .lstrip()   .partition()
  .replace()   .rfind()   .rindex()   .rjust()   .rpartition()   .rsplit()
  .rstrip()   .split()   .splitlines()   .startswith()   .strip()
  .swapcase()   .title()   .translate()   .upper()   .zfill()

【讨论】:

  • 太棒了!我想念的一件事是您无法获得help()__doc__ 之类的&lt;=,因此您应该知道您已经在做什么,关于运营商。好吧,如果您不从头上了解他们的魔术方法。 :) 完全是一个小问题和一个极好的包!
【解决方案4】:

另一种方法是使用漂亮的IPython 环境。它使您可以完成标签以查找对象的所有方法和字段。

【讨论】:

    【解决方案5】:

    让我惊讶的是没有人提到python对象函数:
    keys()

    【讨论】:

    • 是的,这很令人惊讶:p
    • keys() 不是 python 中的内置函数。您可以在 dict 上调用 .keys(),但它不能满足 OP 的需求。
    猜你喜欢
    • 1970-01-01
    • 2014-04-13
    • 2014-02-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    相关资源
    最近更新 更多