-
-
Notifications
You must be signed in to change notification settings - Fork 399
Closed
Labels
Description
In Python 3.10 match/case syntax was added that also has destructuring syntax. dataclass supports this feature and has option to disable this. The current logic is at https://github.com/python/cpython/blob/366c69f3f63a2a1cce57dabe8f7c2e67d1df625d/Lib/dataclasses.py#L374 where init and kw_only are checked.
dataclass had some discussion and added support where __match_args__
generation can be disabled if needed : https://bugs.python.org/issue43764
I have a patch locally working. I can write some tests. But I will be happy to know if a PR is accepted and if an option to disable matching is needed like dataclasses.
attrs
# /tmp/attrs_match.py
import attr
@attr.s
class AttrPerson:
name = attr.ib()
person = AttrPerson(name="Kate")
match person:
case AttrPerson(name):
print(f"Found {name}")
case _:
print("Not found")
python /tmp/attrs_match.py
Traceback (most recent call last):
File "/tmp/attrs_match.py", line 10, in <module>
case AttrPerson(name):
TypeError: AttrPerson() accepts 0 positional sub-patterns (1 given)
Dataclasses
# /tmp/dataclass_match.py
from dataclasses import dataclass
@dataclass
class Person:
name: str
person = Person(name="Kate")
match person:
case Person(name):
print(f"Found {name}")
case _:
print("Not found")
$ python /tmp/dataclass_match.py
Found Kate
sscherfke and Marrin