如何创建具有未知数量的实例的类?

时间:2018-06-08 16:31:40

标签: python loops class object

我需要在一个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的场景。它们将从输入文件中读取 - 因此,从一开始就不知道场景的数量。每个场景的名称应该不同。

3 个答案:

答案 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)