2017-03-11 42 views
0

假設我有一個組件對象,例如路線。Python包裝組件的構造函數的方法並保持參數完成

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

我想提供一個路由管理器類,類似於燒瓶@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日)。

+0

你想完成什麼IDE?你使用的是什麼Python版本?舊的API直接看代碼對象;沒有辦法欺騙他們。較新的代碼使用高級協議。 –

+0

我一直希望有一個通用的解決方案,但我用我的設置更新了這個問題。特定的解決方案比沒有解決方案更好。 – VillasV

回答

1

如果你

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

,你會看到,實際上functools.wraps沒有工作。但是,PyCharm似乎並沒有意識到functools.wrap的含義。我建議把這個報告爲JetBrains

+0

你轉載了嗎?我想在報告之前確定。 – VillasV

+0

是的,我做到了。 PyCharm不會以這種方式識別functools.wraps。 –

+0

現在有一個PyCharm錯誤[PY-23067](https://youtrack.jetbrains.com/issue/PY-23067#tab=Comments&u=1492615536​​736)請求此功能。 @VillasV - 如果你想要的功能,投票。 – mtd

相關問題