【问题标题】:How to create a class with an unknown number of instances?如何创建具有未知数量实例的类?
【发布时间】:2018-11-18 18:25:46
【问题描述】:

我需要在一个class 下创建函数def name_VARIABLE_NUMBER(self): 的多个实例。

实例的数量将从输入文件中确定,并且从一开始就未知。 可以运行这样的东西吗?

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 调用它们。

在类中创建多个未知数量的具有不同名称的defs 的最佳选择是什么?

初始代码can be found here。这是mayavi场景。它们将从输入文件中读取 - 因此,场景的数量从一开始就未知。每个场景的名称应该不同。

【问题讨论】:

  • 它们不是实例,它们是方法。但我对一般意义上的你想要做的事情感到困惑。
  • 假设你能做到这一点,你会如何使用这些功能?
  • 这似乎是一个 x-y 问题。 为什么你要这样做,而不是泛化一个函数来处理实例号作为函数参数。
  • “从另一个函数调用”不足以描述您的问题。请发布您的预期用法示例。
  • 在您提供的链接中,唯一有用的代码是其他人编写的。现在您要求我们将其调整到您选择的领域,而您没有做出重大贡献。 需要缩小理解上的差距,然后才能合理地向 SO 寻求帮助。

标签: python loops class object


【解决方案1】:

虽然可以使用setattr 或操作类的__dict__,但在您的用例中,创建带有参数的单个函数会更好吗?对我来说哪个更清楚。

class test:
    def instance_n(self, n):
        print(str(n**3))

【讨论】:

  • instance_n 应该是instance_1, instance_2... 如何使函数的名称带有可变数字?
【解决方案2】:

您要问的是在运行时动态创建方法,这也是以下问题的一部分。

Dynamic/runtime method creation (code generation) in Python

在某种程度上,Python 方法可以像具有某些特定属性的类。您可以在运行时使用内置的setattr 方法定义这些属性,该方法旨在设置类的属性。

【讨论】:

    【解决方案3】:

    得到了有效的解决方案,感谢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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      相关资源
      最近更新 更多