suit_names와 rank_names 같은 변수는 클래스 내부에 정의되지만, 메서드 바깥에 정의된다. 이런 변수는 클래스 객체 Card와 연관되어 있으므로 클래스 속성이라고 한다.
suit와 rank처럼 특정 인스턴스에만 연관되는 변수를 인스턴스 속성(instance attribute)이라고 해서 클래스 속성과 구분한다.
두 가지 속성 모두 점 표기법을 사용해 접근한다. 예를 들어 _ _str_ _에서 self는 Card 객체이고, self.rank는 Card 객체의 rank가 된다. 마찬가지로 Card는 클래스 객체이고, Card.rank_names는 Card 클래스와 연관된 문자열 리스트가 된다.
모든 카드는 문양과 순위가 있지만, suit_names와 rank_names는 오직 하나만 존재한다.
이들 표현을 모두 모아서 Card.rank_names[self.rank]라고 쓰면 “Card 클래스의 rank_names 리스트에 객체 self의 rank 속성을 인덱스로 사용해서 이에 해당하는 문자열을 선택하라”는 뜻이 된다.
순위가 0인 카드는 없으므로 rank_names의 첫 번째 원소는 None이 된다. None을 0번째로 포함해두면 인덱스 2를 문자열 '2'로 매핑하는 속성을 얻을 수 있다. 이런 꼼수를 사용하고 싶지 않다면 리스트 대신 사전을 사용할 수 있다.