Каков 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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