Padrões de classes
Faça correspondência com atributos de objetos
Padrões de classes é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.
Correspondência com objetos
Os padrões de classe permitem que match verifique o tipo de um objeto e extraia seus atributos em uma única etapa. Eles se parecem com uma chamada de construtor dentro de um caso.
Verificação apenas do tipo
Um padrão de classe com parênteses vazios corresponde a qualquer instância dessa classe.
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]))Capturando atributos por nome
Dentro dos parênteses, escreva attr=name para corresponder a instâncias e associar o atributo nomeado a uma variável.
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)Correspondência com valores específicos de atributos
Você pode exigir que um atributo seja igual a um literal. Este caso corresponde apenas a pontos posicionados no eixo 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)))Padrões posicionais com atributos de correspondência
Se uma classe definir __match_args__, você poderá corresponder aos atributos por posição. As classes de dados definem isso automaticamente a partir da ordem dos 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)Definindo atributos posicionais manualmente
Para uma classe comum, defina __match_args__ como uma tupla que nomeie os atributos que você deseja disponibilizar por posição.
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)Distribuindo por classe
Os padrões de classe formam um distribuidor claro para uma família de tipos relacionados, cada um tratado por seu próprio 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)))Aninhando padrões de classe
Os padrões de classe podem ser aninhados. Um campo que seja ele próprio um objeto pode ser comparado com outro padrão de classe.
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)Combinando com tipos integrados
Os tipos integrados aceitam um único argumento posicional que captura o valor. int(n) corresponde a um inteiro e o associa 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'))Quando usar padrões de classe
Use padrões de classe quando estiver trabalhando com objetos cuja lógica dependa tanto do tipo quanto dos valores dos atributos, como objetos de eventos, nós de AST ou hierarquias de formas. Eles substituem verificações detalhadas com isinstance seguidas de acesso aos atributos.
Combinando argumentos posicionais e nomeados
Você pode combinar subpadrões posicionais e nomeados em um único padrão de classe, assim como em uma chamada de função. Os posicionais usam a ordem de __match_args__; os nomeados especificam o atributo explicitamente.
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)Verificação rápida
A que corresponde o padrão Point(x=0, y=y)?
Recapitulação
Você aprendeu a fazer correspondência com os atributos dos objetos.
ClassName()verifica o tipo.attr=nameassocia atributos; os literais exigem valores exatos.__match_args__permite a correspondência posicional.- Os padrões de classe podem ser aninhados e distribuídos por hierarquias de tipos.
Perguntas Frequentes
A aula “Padrões de classes” é grátis?
Sim — o texto completo de “Padrões de classes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.
O que vou aprender em “Padrões de classes”?
Faça correspondência com atributos de objetos Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Python Academy?
Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Padrões de classes”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Python Academy?
Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Noções básicas de match e case
- Correspondência de sequências e mapeamentos
- Padrões de classes
- Guardas e curingas