Написать метакласс AnnoCalc, который добавляет в конструируемый с его помощью класс такое свойство: если (1) в классе есть аннотация к полю, (2) самого поля у экземпляра/класса нет, и (3) эта аннотация — строка, то при чтении из этого поля строка-аннотация интерпретируется как выражение с участием других полей объекта/класса. Выражение вычисляется и возвращается соответствующее значение. Если какое-то из условий (1), (2), (3) не выполнено, класс ведёт себя стандартно (добывает имеющееся значение поля или вызывает исключение).

   1 class C(metaclass=AnnoCalc):
   2     A: int = 123
   3     B: "A * 2 + 1"
   4 
   5     def __init__(self, A):
   6         self.A = A
   7 
   8 c = C(23)
   9 print(c.B)
  10 c.A = 100
  11 print(c.B)

47
201


CategoryHomework

LecturesCMC/PythonIntro2025/Homework_AnnoCalc (последним исправлял пользователь FrBrGeorge 2025-12-10 20:04:18)