如何以编程方式报告类的API?

4

我的目标是解析一个类并返回一个描述该类中包含的方法和相关参数的数据结构(对象、字典等)。如果能包括类型和返回值信息则更佳。要求使用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"]}]}

那只是我想法的一个例子...在数据结构方面,我非常灵活。

有什么想法/示例可以实现这个吗?


这是一个关于编程的问题,链接为https://dev59.com/pHNA5IYBdhLWcg3wX8nk。它包含了你所需要的信息,并且解释了你不能做的事情。 - Anurag Uniyal
1个回答

8

您可能需要查看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,))

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


1
“inspect” 看起来就是你要找的东西。如果想要一个更低技术的解决方案,你可以查看 Foo.__dict__,其中包含了大部分(全部?)class Foo 的成员。 - Mike Mazur
1
还可以使用 Foo.__name__ 来获取类的名称。当您传递一个包含类的对象时,这非常有用。 - Mike Mazur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接