Напишите параметрический декоратор Record(строка, **именные_параметры) произвольного класса, использующего __slots__ в качестве объектной модели. Декоратор должен добавлять в возвращаемый класс слоты, имена которых перечислены через пробел в строке, и поля только для чтения, имена и значения которых перечислены в именных_параметрах. Имена не могут начинаться на "_". Слоты возвращаемого класса перечисляются в алфавитном порядке. Имена полей могут перекрывать имена слотов родительского класса.

   1 @Record("b c", d=11, e=12)
   2 class C:
   3     __slots__ = ["a", "b"]
   4     c = 8
   5     d = 9
   6 
   7 
   8 c = C()
   9 c.a, c.c = 42, 100500
  10 print(c, "//", "".join(c.__slots__))
  11 print(*(getattr(c, attr, "<NOPE>") for attr in c))
  12 for i, attr in enumerate(c):
  13     try:
  14         setattr(c, attr, i)
  15     except AttributeError:
  16         pass
  17 print(c, "//", *(getattr(c, attr, "<NOPE>") for attr in c))

a=42|b|c=100500|d:11|e:12 // abc
42 <NOPE> 100500 11 12
a=0|b=1|c=2|d:11|e:12 // 0 1 2 11 12


CategoryHomework

LecturesCMC/PythonIntro2023/Homework_RecordPlus (последним исправлял пользователь FrBrGeorge 2023-11-13 23:31:42)