Python使用方法包装组件构造函数并保持参数完成

时间:2017-03-11 17:53:46

标签: python pycharm python-decorators

我们说我有一个组件对象,例如路由。

class Route:
    def __init__(self, url='localhost', port=80)
        ...

我想提供一个路由管理器类,类似于Flask对@app.route的处理,所以我可以创建并跟踪路由:

class Router:
    def route(self, *args, **kwargs):
        route = Route(*args, **kwargs)
        self.routes.append(route)

是否有一种简单的方法可以使Router.route方法的参数完成和/或文档自动反映Route.__init__

我尝试使用functools.wraps,但它没有立即生效。也许我用错了?

class Router:
    @wraps(Route.__init__)
    def route(self, *args, **kwargs):
        route = Route(*args, **kwargs)
        self.routes.append(route)

编辑:我使用Python 3.6和最新的PyCharm(2016.3.2)。

1 个答案:

答案 0 :(得分:2)

如果你这样做

import inspect
print(inspect.signature(Route.route))
print(help(Route.route))

你会看到functools.wraps确实有效。然而,似乎PyCharm并不知道functools.wraps的含义。我建议将此报告为JetBrains的错误。