2014-07-04 85 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的环境,可以这样工作。也许你可以看看它。 –