需要一种更简洁的方法来避免过多的“if语句”来编写这种方法来将数据输入到数据存储区实体属性中吗?

时间:2010-04-05 08:22:40

标签: google-app-engine google-cloud-datastore

在不使用下面示例代码中的四个'if statements'的情况下引用数据存储区模型属性的最佳方法是什么,这看起来很麻烦且效率低下。对于真实世界的代码,我可能有100个属性的情况,例如self.var1, self.var2, ... self.varN,我想要一些仅使用整数(或字符串)作为某个方法的参数。

class PixelObject(db.Model):

 zoom0 = db.ListProperty(int)
 zoom1 = db.ListProperty(int)
 zoom2 = db.ListProperty(int)
 zoom3 = db.ListProperty(int)
 zoom4 = db.ListProperty(int)

 def inputZoomData(self, zoomInteger, input_data):
        """input_data goes to specified attribute based on if 0,1,2,3,or 4 is argument"""

  if zoomInteger == 0: self.zoom0 = input_data
  if zoomInteger == 1: self.zoom1 = input_data
  if zoomInteger == 2: self.zoom2 = input_data
  if zoomInteger == 3: self.zoom3 = input_data
  if zoomInteger == 4: self.zoom4 = input_data

2 个答案:

答案 0 :(得分:2)

如何使用整数数组,而不是保存五个不同的整数属性?

答案 1 :(得分:2)

我还建议使用数组而不是五个成员来简化代码:

if 0 <= zoomInteger < len(zooms):
    self.zooms[zoomInteger] = input_data
else:
    # Error handling.

如果你无法改变课程的设计方式,另一种方法是使用setattr

setattr(self, 'zoom' + str(zoomInteger), input_data)