0Pricing
Python Academy · 강의

클래스 패턴

객체 속성과 일치시키기

클래스 패턴은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

객체와 일치시키기

클래스 패턴을 사용하면 match가 객체의 형식을 확인하고 속성을 한 번에 꺼낼 수 있습니다. 각 절 안에서 생성자 호출처럼 보이는 형태로 작성합니다.

형식만 확인하기

빈 괄호를 사용하는 클래스 패턴은 해당 클래스의 모든 인스턴스와 일치합니다.

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]))

이름으로 속성 캡처하기

괄호 안에 attr=name을 작성하면 인스턴스와 일치시키면서 이름이 지정된 속성을 변수에 연결할 수 있습니다.

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)

특정 속성 값과 일치시키기

속성이 리터럴과 같아야 한다고 지정할 수 있습니다. 이 절은 x축 위에 있는 Point와만 일치합니다.

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)))

__match_args__를 사용한 위치 패턴

클래스가 __match_args__를 정의하면 속성을 위치로 일치시킬 수 있습니다. 데이터 클래스는 필드 순서를 바탕으로 이를 자동 설정합니다.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p = Point(3, 4)

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

__match_args__ 직접 정의하기

일반 클래스에서는 __match_args__에 위치로 사용할 속성의 이름을 지정하는 튜플을 설정합니다.

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)

클래스별로 분배하기

클래스 패턴을 사용하면 서로 관련된 형식들의 모음에 대해 각 형식을 자체 절로 처리하는 깔끔한 분배기를 만들 수 있습니다.

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)))

클래스 패턴 중첩하기

클래스 패턴은 중첩할 수 있습니다. 필드 자체가 객체인 경우 다른 클래스 패턴으로 일치시킬 수 있습니다.

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)

내장 형식과 결합하기

내장 형식은 값을 캡처하는 단일 위치 인수를 지원합니다. int(n)은 정수와 일치하고 이를 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'))

클래스 패턴을 사용할 때

이벤트 객체, AST 노드, 도형 계층 구조처럼 객체의 형식과 속성 값이 모두 로직을 결정할 때 클래스 패턴을 사용하면 좋습니다. 클래스 패턴은 장황한 isinstance 검사와 속성 접근을 대신합니다.

위치와 키워드 섞기

함수 호출과 마찬가지로 하나의 클래스 패턴에서 위치 하위 패턴과 키워드 하위 패턴을 섞어 사용할 수 있습니다. 위치 패턴은 __match_args__ 순서를 사용하고, 키워드 패턴은 속성 이름을 명시적으로 지정합니다.

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)

빠른 확인

Point(x=0, y=y) 패턴은 무엇과 일치하나요?

복습

객체 속성을 기준으로 일치시키는 방법을 배웠습니다.

  • ClassName()은 형식을 확인합니다.
  • attr=name은 속성을 연결하고, 리터럴은 정확한 값을 요구합니다.
  • __match_args__는 위치 기반 일치를 활성화합니다.
  • 클래스 패턴은 중첩할 수 있으며 형식 계층 구조에 따라 분배할 수 있습니다.

자주 묻는 질문

“클래스 패턴” 강의는 무료인가요?

네 — “클래스 패턴” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“클래스 패턴”에서 뭘 배우나요?

객체 속성과 일치시키기 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Python Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“클래스 패턴” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. match와 case 기초
  2. 시퀀스와 매핑 매칭하기
  3. 클래스 패턴
  4. 가드와 와일드카드
← Python Academy(으)로 돌아가기