Python中的动态运行时方法

时间:2012-04-30 08:10:00

标签: python django dynamic-method

class Screening(models.Model):
  def get_omitted_1(self):
       return OmittedInformationReason.objects.get(pk=self.omitted_1).name 
  get_omitted_1 = property(get_omitted_1)

我希望能够访问screening_instance.get_omitted_1,screening_instance.get_omitted_2以及screening_instance.get_omitted_10。有没有更好的方法来做到这一点,而不为每个案例创建get_omitted_1,get_omitted_2 ..方法,如get_omitted_%d ??

我尝试在运行时创建动态函数但是遇到了一些问题。我试过这样的事情:

def omitted_list(self,x):
    def omitted_function(self): 
        opk = "omitted_%d" % x
        return OmittedInformationReason.objects.get(pk=self.opk).name

    omitted_name = 'get_omitted_'+ str(x)

    setattr(self.__class__, omitted_name , omitted_function)
    omitted_name = property(omitted_name)

    for x in range(1, 3): 
      omitted_list(x)

2 个答案:

答案 0 :(得分:1)

我无法看到任何可能的需求。如果您需要动态访问项目,请使用以下方法:这是他们的目标。

def get_omitted(self, number):
    return OmittedInformationReason.objects.get(pk=number)

答案 1 :(得分:0)

  

通过创建这样的方法,我无法在django视图中使用它   for screening.get_omitted.1因此,动态方法使我能够使用   查看为screening.get_omitted_1

啊哈哈!您应该在原始问题中提到这一点。如果你有其他人会指示你documentation for creating custom tags,这是解决问题的正确方法。

创建代码后,您可以在模板中执行{% get_omitted 1 %},然后{% get_omitted 2 %},依此类推。