Нужен более чистый способ, позволяющий избежать слишком большого числа операторов if, для написания этого метода для ввода данных в атрибуты сущностей хранилища данных? - PullRequest
2 голосов
/ 05 апреля 2010

Как лучше всего ссылаться на атрибуты модели хранилища данных без использования четырех '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 ]

2 голосов
/ 05 апреля 2010

Я бы также рекомендовал использовать массив вместо пяти элементов для упрощения вашего кода:

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

Если вы не можете изменить способ создания класса, другой альтернативой является использование setattr:

setattr(self, 'zoom' + str(zoomInteger), input_data)
2 голосов
/ 05 апреля 2010

Как насчет использования массива целых чисел вместо хранения пяти различных целочисленных свойств?

...