Вот мой класс, который имеет константы:Python: как вызвать метод, исходящий из массива?
class Bubble(models.Model):
GAUCHE = u'0'
CENTRE = u'1'
JUSTIFIE = u'2'
DROITE = u'3'
Затем в другой файл, я использую Bulle
так:
drawCustom = {
Bubble.GAUCHE: canvas.Canvas.drawString,
Bubble.CENTRE: canvas.Canvas.drawCentredString,
Bubble.JUSTIFIE: canvas.Canvas.drawAlignedString,
Bubble.DROITE: canvas.Canvas.drawRightString,
}
И в этом файле, чуть позже, у меня есть
for bubble in mymodel.bubbles.all():
# bubble is an instance of the class Bubble
p = canvas.Canvas(response)
p.drawString(100, 100, "Hello world.")
# I want to avoid `drawString` and use my array `drawCustom`
# to make something like:
# p.call(drawCustom[bubble](100, 100, "Hello world."))
Другими словами: p
является объектом canvas.Canvas
, поэтому он может получить доступ ко всем функциям «drawing
». Я хотел бы избежать большой if() elif()
и сделать что-то вроде: p.call(drawCustom[bubble](100, 100, "Hello world."))
Вот мой код, который работает, но я считаю, это некрасиво:
for b in mymodel.bubbles.all():
# b is an instance of the class Bubble
p = canvas.Canvas(response)
if b.texte_alignement == Bulle.GAUCHE:
p.drawString(100, 100, "Hello world.")
elif b.texte_alignement == Bulle.CENTRE:
p.drawCentredString(100, 100, "Hello world.")
elif b.texte_alignement == Bulle.JUSTIFIE:
p.drawAlignedString(100, 100, "Hello world.")
elif b.texte_alignement == Bulle.DROITE:
p.drawRightString(100, 100, "Hello world.")
Можно ли, и если нет, то путь в Python?
А что такое 'пузырь'? –
bubble - это экземпляр класса Bubble –
Я не вижу никакого класса 'Bubble' –