Я согласен с @Dennis: если заявления делают код очень читабельным. Ниже приведена моя попытка решения без использования if
. Возможно, есть более эффективные способы, например, использование оператора format
вместо «f-строк» и, как предполагает @Dennis, возможно использование типа в качестве ключа.
def upload_location(instance, filename):
lookup = dict([
(Story.__name__, lambda instance: f'stories/{instance.id}/cover{extension}'),
(Episode.__name__, lambda instance: f'stories/{instance.story.id}/{instance.index}/cover{extension}'),
(EpisodeSlide.__name__, lambda instance: f'stories/{instance.episode.story.id}/{instance.episode.index}/{instance.id}{extension}')
])
_, extension = os.path.splitext(filename)
loc = lookup[instance.__class__.__name__](instance)
return loc
print(upload_location(e, "hello.txt"))
print(upload_location(es, "hello.txt"))
print(upload_location(s, "hello.txt"))
stories/1/10/cover.txt
stories/1/10/100.txt
stories/1/cover.txt
Повторить, если-последовательности намного лучше, чем вышеупомянутая функция !!
Надеюсь, это поможет.
С уважением,
Прасант