0

Как написать данный код покороче и более эффективно и возможно ли это?

def get_price(user, building):
    if type(user) == SimpleLazyObject:
        if building == 'farm':
            return models.Price.objects.get(user=user).farm
        elif building == 'workshop':
            return models.Price.objects.get(user=user).workshop
        elif building == 'pharmacy':
            return models.Price.objects.get(user=user).pharmacy
        elif building == 'bakery':
            return models.Price.objects.get(user=user).bakery

В данном случае я про код который if building == 'farm':... и после него

КИТ KIT
  • 356
  • 2
  • 15
  • Здесь есть подобное обсуждение: https://ru.stackoverflow.com/questions/460207/%D0%95%D1%81%D1%82%D1%8C-%D0%BB%D0%B8-%D0%B2-python-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80-switch-case – motpfofs Sep 03 '20 at 08:42
  • Создать словарь и работать через него, что-то типа: {"farm" : models.Price.objects.get().farm, "workshop" :...} – Nobody Sep 03 '20 at 08:44
  • Так же советую прочесть про SOLID – 5c0rp Sep 03 '20 at 08:53

1 Answers1

1

Попробуйте так:

def get_price(user, building):
    if type(user) == SimpleLazyObject:
        return getattr(models.Price.objects.get(user=user), building)

Справка по getattr:

https://pythonz.net/references/named/getattr/

Xander
  • 20,499