0Pricing
Python Academy · Lección

Patrones de clases

Compare con los atributos de los objetos

Patrones de clases es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.

Coincidencia con objetos

Los patrones de clase permiten que match compruebe el tipo de un objeto y extraiga sus atributos en un solo paso. Se parecen a una llamada al constructor dentro de un caso.

Comprobar solo el tipo

Un patrón de clase con paréntesis vacíos coincide con cualquier instancia de esa clase.

def kind(value):
    match value:
        case int():
            return 'an integer'
        case str():
            return 'a string'
        case _:
            return 'something else'

print(kind(5))
print(kind('hi'))
print(kind([1]))

Capturar atributos por nombre

Dentro de los paréntesis, escriba attr=name para hacer coincidir instancias y asignar el atributo indicado a una variable.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p = Point(3, 4)

match p:
    case Point(x=px, y=py):
        print('point at', px, py)

Coincidir con valores de atributos específicos

Puede exigir que un atributo sea igual a un literal. Este caso solo coincide con puntos situados en el eje x.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

def describe(p):
    match p:
        case Point(x=0, y=0):
            return 'origin'
        case Point(x=x, y=0):
            return 'on x-axis at ' + str(x)
        case Point():
            return 'elsewhere'

print(describe(Point(0, 0)))
print(describe(Point(5, 0)))
print(describe(Point(1, 1)))

Patrones posicionales con __match_args__

Si una clase define __match_args__, puede hacer coincidir atributos por posición. Las clases de datos lo establecen automáticamente a partir del orden de sus campos.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p = Point(3, 4)

match p:
    case Point(px, py):
        print(px, py)

Definir __match_args__ manualmente

En una clase normal, establezca __match_args__ en una tupla que indique los nombres de los atributos que quiera poner a disposición por posición.

class Point:
    __match_args__ = ('x', 'y')
    def __init__(self, x, y):
        self.x = x
        self.y = y

match Point(1, 2):
    case Point(a, b):
        print(a, b)

Distribuir por clase

Los patrones de clase permiten crear un distribuidor claro para una familia de tipos relacionados, cada uno gestionado por su propio caso.

from dataclasses import dataclass

@dataclass
class Circle:
    radius: float

@dataclass
class Square:
    side: float

def area(shape):
    match shape:
        case Circle(radius=r):
            return 3.14159 * r * r
        case Square(side=s):
            return s * s

print(area(Circle(2)))
print(area(Square(3)))

Anidar patrones de clase

Los patrones de clase se pueden anidar. Un campo que sea a su vez un objeto puede hacerse coincidir con otro patrón de clase.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

@dataclass
class Line:
    start: Point
    end: Point

line = Line(Point(0, 0), Point(3, 4))

match line:
    case Line(start=Point(x=0, y=0), end=Point(x=ex, y=ey)):
        print('from origin to', ex, ey)

Combinar con tipos integrados

Los tipos integrados admiten un único argumento posicional que captura el valor. int(n) coincide con un entero y lo asigna a n.

def label(value):
    match value:
        case int(n):
            return 'int ' + str(n)
        case str(s):
            return 'str ' + s
        case _:
            return 'other'

print(label(7))
print(label('hi'))

Cuándo usar patrones de clase

Recurra a los patrones de clase cuando la lógica dependa tanto del tipo de los objetos como de los valores de sus atributos, por ejemplo, con objetos de eventos, nodos AST o jerarquías de formas. Sustituyen las comprobaciones detalladas de isinstance combinadas con el acceso a atributos.

Combinar patrones posicionales y de palabra clave

Puede combinar subpatrones posicionales y de palabra clave en un mismo patrón de clase, igual que en una llamada a una función. Los posicionales usan el orden de __match_args__; los de palabra clave indican explícitamente el atributo.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int
    z: int

p = Point(1, 2, 3)

match p:
    case Point(x, y, z=depth):
        print(x, y, depth)

Comprobación rápida

¿Con qué coincide el patrón Point(x=0, y=y)?

Resumen

Ha aprendido a hacer coincidir atributos de objetos.

  • ClassName() comprueba el tipo.
  • attr=name asigna atributos; los literales exigen valores exactos.
  • __match_args__ permite la coincidencia posicional.
  • Los patrones de clase se pueden anidar y permiten distribuir según jerarquías de tipos.

Preguntas frecuentes

¿La lección «Patrones de clases» es gratis?

Sí — el texto completo de «Patrones de clases» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Patrones de clases»?

Compare con los atributos de los objetos Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Python Academy?

No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Patrones de clases»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Python Academy?

Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Conceptos básicos de match y case
  2. Coincidencia de secuencias y mapeos
  3. Patrones de clases
  4. Guardas y comodines
← Volver a Python Academy