Сокращение следующих строк кода PhotoImage до как можно меньшего количества строк

1

Цель состоит в том, чтобы уменьшить следующий код до нескольких строк (и как несколько символов) кода, насколько это возможно. Он не должен быть "читаемым" или даже "питоновым", просто коротким и сладким. это больше для удовольствия.

self.BlueEgg = PhotoImage(file="assets/blueegg.gif")
self.PolkaEgg = PhotoImage(file="assets/polkaegg.gif")
self.RedEgg = PhotoImage(file="assets/redegg.gif")
self.StripeEgg = PhotoImage(file="assets/sripeegg.gif")
self.YellowEgg = PhotoImage(file="assets/yellowegg.gif")
self.PurpleEgg = PhotoImage(file="assets/purpleegg.gif")
self.PinkEgg = PhotoImage(file="assets/pinkegg.gif")
self.OrangeEgg = PhotoImage(file="assets/orangeegg.gif")
self.CrazyEgg = PhotoImage(file="assets/crazyegg.gif")
self.PlainEgg = PhotoImage(file="assets/plainegg.gif")

Это применимо к моей программе, но я больше хотел просто посмотреть, что вы, ребята, можете придумать! счастливый пасхальный каждый!

Теги:
metaprogramming

2 ответа

3
Лучший ответ

Единственное, что меняется, это тип яйца, который изменяет атрибут на себе и имя файла. Так что...

types = ('Blue', 'Polka', 'Red', 'Stripe', 'Yellow', 'Purple', 'Pink', 'Orange', 'Crazy', 'Plain')
for t in types:
    setattr(self, '%sEgg' % t, PhotoImage(file='assets/%segg.gif' % t.lower()))
  • 1
    t = («Синий» и т. д.), потому что я в т: купил бы вам несколько символов.
2

Сохранять атрибуты и имена файлов в кортежах в списке:

mylistoftuples = [('BlueEgg', "assets/blueegg.gif"), .......]

тогда, назначьте в цикле:

for attr, filename in mylistoftuples:
   setattr(self, attr, PhotoImage(file=filename))

Обратите внимание, что у вас есть еще две возможности для массажа кода:
1) каталог всегда один и тот же, поэтому вам не нужно жестко указывать активы /xxxx.gif для каждого элемента в списке. Вы можете построить его внутри цикла for. 2) имена файлов равны атрибуту в нижнем регистре. Поэтому, если вы сохраняете только атрибут (p.e. BluEgg) в списке вместо кортежа, вы можете получить путь к нему из файла:

mylist = ['BlueEgg', .......]
for attr in mylist:
     filename = os.path.join('assets', '%s.gif' % attr.lower()) 
     setattr(self, attr, PhotoImage(file=filename))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню