修改类的检查中使用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的环境,可以这样工作。也许你可以看看它。 –