Stabilirea alias-urilor și pattern-ul as
Operatorul as permite stabilirea unui alias pentru valoarea unui șablon sau pentru întregul șablon. Un exemplu simplu:
def print_person(person):
match person:
case "Tom" | "Tomas" | "Tommy" as name:
print(f"Nume: {name}")
case _:
print("Nedefinit")
print_person("Tom") # Nume: Tom
print_person("Tomas") # Nume: Tomas
print_person("Bob") # Nedefinit
Aici, primul șablon corespunde celor trei șiruri de caractere: "Tom" | "Tomas" | "Tommy". După setul de valori urmează operatorul as, după care este specificat alias-ul. Indiferent de ce șir este transmis, acesta va ajunge în variabila name.
Alias-ul poate fi aplicat atât pentru o valoare individuală a șablonului, cât și pentru întregul șablon:
def print_person(person):
match person:
case ("Tom" | "Tomas" as name, 37 | 38 as age): # alias-uri pentru valori individuale
print(f"Tom| Nume: {name} Vârstă: {age}")
case ("Bob" | "Robert", 41 | 42) as bob: # alias pentru întregul șablon
print(f"Bob| Nume: {bob[0]} Vârstă: {bob[1]}")
case _:
print("Nedefinit")
print_person(("Tomas", 38)) # Tom| Nume: Tomas Vârstă: 38
print_person(("Robert", 41)) # Bob| Nume: Robert Vârstă: 41
Alias-urile sunt de obicei mai utile în cazul unor structuri de date mai complexe. De exemplu:
class Person:
__match_args__ = ("name", "age")
def __init__(self, name, age):
self.name = name
self.age = age
def print_family(family):
match family:
case (Person() as husband, Person() as wife):
print(f"Soț. Nume: {husband.name} Vârstă: {husband.age}")
print(f"Soție. Nume: {wife.name} Vârstă: {wife.age}")
case _:
print("Nedefinit")
print_family((Person("Tom", 37), Person("Alice", 33)))
# Soț. Nume: Tom Vârstă: 37
# Soție. Nume: Alice Vârstă: 33
print_family((Person("Sam", 28), Person("Kate", 25)))
# Soț. Nume: Sam Vârstă: 28
# Soție. Nume: Kate Vârstă: 25
Aici, funcția print_family primește un tuplu care ar trebui să fie compus din două elemente de tip Person. În primul șablon, se definește pentru primul element alias-ul husband, iar pentru al doilea alias-ul wife. Apoi, folosind aceste alias-uri, putem accesa atributele acestora.