Почему мой оператор match/case не работает для членов класса?Python

Программы на Python
Гость
Почему мой оператор match/case не работает для членов класса?

Сообщение Гость »


Наконец-то я использую версию Python с поддержкой оператора match и был удивлен, что один из моих case не совпал. Кажется, он отлично работает с локальными или глобальными переменными, но не с членами класса/объекта.

Я свел это к следующему примеру:

#!/usr/bin/env python3 глобл = Нет класс MyObj(объект): проходить проверка защиты (v): глобальный глобальный глобальный = 2 м = МойОбъект() м.вал = 2 местный = 2 совпадение v: общий случай: print(v, 'globl ОК', globl) совпадение v: случай локальный: print(v, 'локальный ОК', локальный) совпадение v: случай м.вал: print(v, 'm.val ОК', m.val) чек(1) чек(2) чек(3) ...что дает следующий результат:

tmp$ ./match-experiment.py 1 глоб ОК 1 1 местный ОК 1 2 глобальных ОК 2 2 местных ОК 2 2 м.вал ОК 2 3 глобально ОК 3 3 местных ОК 3 Похоже, что глобальная и локальная переменная используются «по ссылке», а член класса — «по значению». Таким образом, обычным переменным, как я и ожидал, присваивается совпадающее значение, но член класса case выполняется только тогда, когда текущее значение этой переменной равно совпадающему v< /код>.

Почему оператор match/case не работает для членов класса?

Вернуться в «Python»