2014-07-04 87 views
0

修改類的檢查中使用Google花了幾個小時後,我學到了很多東西,但沒有發現以下任何關閉主題:蟒蛇Spyder的編輯器自動完成,並與SETATTR

我目前通過編程上動態創建的類工廠方法。原因是,方法名稱應該根據單獨的yaml文件填充。歸結爲這個問題:

def create_class_with_dynamic_fuction_name(fun_name): 
    def fun(self): 
     print "Hello, I am fun" 

    class X: 
     pass 

    setattr(X, fun_name, fun) 
    return X 

Kls1= create_class_with_dynamic_fuction_name('my_function_name') 
kls1= Kls1() 
kls1.my_function_name() 

此代碼的工作原理。但是,如果您在sypder(又名Spider IDE,spyderlib)的編輯器中擁有此代碼,自動完成將不會在其上下文框中顯示my_function_name。也不可能通過Ctrl+I檢查它,以便於檢索文檔字符串幫助。

如果使用type(classname,(), clsdict)創建類,則會出現同樣的問題。在這種情況下,只能在自動完成上下文菜單中找到mro

另外我發現,它不是上述封閉模式的問題。你可以做

def create_class_with_static_function_name(): 
    def fun(self): 
     print "Hello, I am fun" 

    class X: 
     my_function_name = fun 

    return X 

Kls2= create_class_with_static_function_name() 
kls2= Kls2() 
kls2.my_function_name() 

在這種情況下,my_function_name顯示正確,但它不是我的目的了。

很高興在這裏有任何建議來完成動態創建類的動態方法名稱,這些名稱在編輯器窗口內的spyder的自動完成中正確處理。

回答

0

(這裏Spyder的DEV)對不起,看來我們使用完成庫(稱爲rope)不能做這種落成的動態類和屬性。

歡迎您在郵件列表上詢問這件事,如果我們可以在我們身邊做些事情,我們將很樂意提供幫助。

+0

感謝您的回答。我也很清楚,繩子不能提供這種功能。但是,如果編輯器可以選擇性地連接到當前的解釋器,那麼將會使用解釋器的上下文菜單來代替。只是一個想法。 – PyPhreak

+0

我認爲[Canopy](https://www.enthought.com/products/canopy/)是一種類似於Spyder的環境,可以這樣工作。也許你可以看看它。 –