Каков Pythonic-способ использования операторов match/case с классами, которые предоставляют только методы получения и меPython

Программы на Python
Anonymous
Каков Pythonic-способ использования операторов match/case с классами, которые предоставляют только методы получения и ме

Сообщение Anonymous »

У меня есть несколько классов, которыми я не владею. Эти классы предоставляют методы для доступа к внутренней информации, а не к атрибутам или свойствам.
Например, класс может выглядеть примерно так:

Код: Выделить всё

class Foo:
def __init__(self, a, b) -> None:
self._a = a
self._b = b

def a(self): return self._a
def b(self): return self._b
def c(self): return self._a + self._b
Я хотел бы иметь возможность использовать совпадение/регистр, чтобы сделать что-то вроде этого:

Код: Выделить всё

foo_list = [
Foo(1,0),
Foo(0,1),
Foo(1,2),
Foo(3,3),
Foo(3,2),
]

for foo in foo_list:
match foo:
case Foo(a=a, b=0):
print(f'first a = {a}, b = {foo.b}')
case Foo(a=0, b=b):
print(f'second a = {foo.a}, b = {b}')
case Foo(a=1, b=b):
print(f'third a = {foo.a}, b = {b}')
case Foo(a=a, b=3):
print(f'forth a = {a}, b = {foo.b}')
case Foo(a=a, b=b, c=5):
print(f'fifth a = {a}, b = {b}, c = {foo.c}')
Однако это не работает, поскольку операторы case, соответствующие объекту, ожидают синтаксиса, подобного конструктору, где именованные аргументы являются атрибутами или свойствами, а не методами получения, что у меня и есть.
Каков питонический способ сопоставления/регистрации операторов с такими классами?

Подробнее здесь: https://stackoverflow.com/questions/786 ... t-only-pro

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