【问题标题】:How can I report the API of a class programmatically?如何以编程方式报告类的 API?
【发布时间】:2010-11-08 01:25:07
【问题描述】:

我的目标是解析一个类并返回一个描述类中包含的方法和相关参数的数据结构(对象、字典等)。类型和返回的奖励积分...

要求:必须是 Python

例如下面的类:

class Foo:
    def bar(hello=None):
         return hello

    def baz(world=None):
         return baz

会被解析返回

result = {class:"Foo", 
          methods: [{name: "bar", params:["hello"]}, 
                    {name: "baz", params:["world"]}]}

所以这只是我在想的一个例子......我在数据结构上非常灵活。

关于如何实现这一点的任何想法/示例?

【问题讨论】:

标签: python api


【解决方案1】:

您可能想查看 Python 的 inspect 模块。它会带你去那里的大部分路:

>>> class Foo:
...     def bar(hello=None):
...          return hello
...     def baz(world=None):
...          return baz
...
>>> import inspect
>>> members = inspect.getmembers(Foo)
>>> print members
[('__doc__', None), ('__module__', '__main__'), ('bar', <unbound method Foo.bar>
), ('baz', <unbound method Foo.baz>)]
>>> inspect.getargspec(members[2][1])
(['hello'], None, None, (None,))
>>> inspect.getargspec(members[3][1])
(['world'], None, None, (None,))

这不是您想要的语法,但是当您阅读文档时,这部分应该相当简单。

【讨论】:

  • inspect 看起来就像您要找的一样。对于技术含量更低的解决方案,您可以查看Foo.__dict__,其中包含大多数(全部?)class Foo 的成员。
  • ...还有Foo.__name__ 来获取类的名称。当你传递一个包含类的对象时很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
相关资源
最近更新 更多