Написать метакласс positioned, который добавляет в создаваемый с его помощью класс три свойства:
Строковое представление экземпляра этого класса должно выглядеть как "поле1=значение1 поле2=значение2 …" для всех аннотированных полей этого класса (в порядке их появления в аннотации).
- При создании экземпляра класса ему можно передавать произвольное количество параметров (включая ноль). Первый параметр инициализирует первое аннотированное поле в этом экземпляре, второй — второе и т. д.; если параметров больше, чем аннотированных полей, они отбрасываются
- При сопоставлении шаблону допускается позиционное сопоставление с аннотированными полями (в порядке появления в аннотации)
Переключить отображение номеров строк
1 class C(metaclass=positioned):
2 a: int = 1
3 b: float = 42.0
4
5 for c in C(), C(4), C(100.0, 500), C(7, 2):
6 print(c)
7 match c:
8 case C(1):
9 print("C1", c.b)
10 case C(b=42):
11 print("C42", c.a)
12 case C(100, 500):
13 print("C100500")
14 case C():
15 print("C", c)
a=1 b=42.0 C1 42.0 a=4 b=42.0 C42 4 a=100.0 b=500 C100500 a=7 b=2 C a=7 b=2