我需要在一个def name_VARIABLE_NUMBER(self):
下创建多个函数class
的实例。
实例数将从输入文件中确定,并且从一开始就是未知的。 可以运行这样的东西吗?
NUMBER_of_INSTANCES = 10
class test:
def instance_1(self):
print (str(1**3))
def instance_2(self):
print (str(2**3))
...
def instance_10(self):
print (str(9**3))
我想创建一个循环,用于在一个类下创建不同的函数名,并选择使用test.instance_NUMBER
调用它们。
在课堂内创建具有不同名称的多个且未知数量的def
的最佳选项是什么?
初始代码can be found here。这是mayavi的场景。它们将从输入文件中读取 - 因此,从一开始就不知道场景的数量。每个场景的名称应该不同。
答案 0 :(得分:2)
尽管可以使用setattr
或操作类的__dict__
,但在您的使用案例中,使用参数创建单个函数是否更好? ?对我来说更清楚。
class test:
def instance_n(self, n):
print(str(n**3))
答案 1 :(得分:1)
您要问的是在运行时动态创建方法,这也是以下问题的一部分。
Dynamic/runtime method creation (code generation) in Python
在某种程度上,Python方法可以像具有某些特定属性的类。您可以使用内置的setattr
方法在运行时定义这些属性,该方法用于设置类的属性。
答案 2 :(得分:0)
得到了有效的解决方案,感谢Yserbius
NUMBER_of_INSTANCES = 10
class test(object):
pass
def add_instance(cls,i):
def instance(self):
print (str(i**3))
instance.__doc__ = "docstring for instance%d" % i
instance.__name__ = "instance%d" % i
setattr(cls,instance.__name__,instance)
d = test()
for i in range(NUMBER_of_INSTANCES):
add_instance(test, i)
a = str('d.instance'+str(i)+'()')
exec(a)