在谷歌上花了几个小时后,我学到了很多东西,但没有找到与以下内容相近的话题:
我目前正在通过工厂方法对动态创建的类进行编程。原因是,方法名称应根据单独的 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 自动完成中得到了正确处理。