Цель состоит в том, чтобы уменьшить следующий код до нескольких строк (и как несколько символов) кода, насколько это возможно. Он не должен быть "читаемым" или даже "питоновым", просто коротким и сладким. это больше для удовольствия.
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")
Это применимо к моей программе, но я больше хотел просто посмотреть, что вы, ребята, можете придумать! счастливый пасхальный каждый!
Единственное, что меняется, это тип яйца, который изменяет атрибут на себе и имя файла. Так что...
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()))
Сохранять атрибуты и имена файлов в кортежах в списке:
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))