클래스는 데이터와 동작을 묶는 사용자 타입이다. 인스턴스 메서드의 첫 매개변수 `self`는 호출된 객체다.

class Game:
    species = "janggi"

    def __init__(self, name: str) -> None:
        self.name = name
        self.moves: list[str] = []

    def add(self, move: str) -> None:
        self.moves.append(move)

`game.add(move)`는 본질적으로 `Game.add(game, move)`다. Python에는 C++식 private 접근 강제가 없다. `_name`은 내부 구현이라는 관례이고, `__name`은 클래스 이름을 섞어 우연한 충돌을 줄일 뿐 보안 장치가 아니다.

클래스 메서드는 `@classmethod`로 클래스를 첫 인자 `cls`로 받고 대체 생성자에 맞다. 정적 메서드는 객체나 클래스 상태를 쓰지 않는 관련 함수다. 관련성도 없다면 모듈 함수로 두는 편이 단순하다.

Python 13. 클래스와 인스턴스의 핵심 흐름도
그림. 인스턴스별 변경 상태는 클래스 본문이 아니라 __init__에서 만든다.