修改類的檢查中使用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的自動完成中正確處理。
感謝您的回答。我也很清楚,繩子不能提供這種功能。但是,如果編輯器可以選擇性地連接到當前的解釋器,那麼將會使用解釋器的上下文菜單來代替。只是一個想法。 – PyPhreak
我認爲[Canopy](https://www.enthought.com/products/canopy/)是一種類似於Spyder的環境,可以這樣工作。也許你可以看看它。 –