Написать класс (или функцию) — параметрический декоратор @Matchable(…), которому предаются типы полей (ноль или больше). @Matchable(тип1, тип2, …) модифицирует декорируемый класс, добавляя туда возможность позиционного сопоставления полей в операторе match / case. Поля для позиционного сопоставления берутся из аннотации класса в порядке появления в ней; в сопоставлении участвуют только поля одного из заданных типов — тип1, тип2 и т. д.

   1 @Matchable(int, float)
   2 class C:
   3     a: int
   4     s: str
   5     d: float
   6 
   7     def __init__(self, a, s, d):
   8         self.a, self.s, self.d = a, s, d
   9 
  10 for A in (C(1, "2", 3), C(3, 3, 4), C(2, "Q", 3)):
  11     match A:
  12         case C(1):
  13             print("One")
  14         case C(_, 3):
  15             print("Three")
  16         case _:
  17             print("Other")

One
Other
Three


CategoryHomework

LecturesCMC/PythonIntro2025/Homework_PosDecor (последним исправлял пользователь FrBrGeorge 2025-12-29 10:03:23)