Почему мой оператор match/case не работает для членов класса? ⇐ 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 с поддержкой оператора 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 не работает для членов класса?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Оператор match/case в Python не позволяет использовать элемент списка в качестве случая
Anonymous » » в форуме Python - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Заявление Python "Match" подчеркнуто Red в Pycharm 2020.3.5, но заявление "Match" работает
Anonymous » » в форуме Python - 0 Ответы
- 36 Просмотры
-
Последнее сообщение Anonymous
-