더북(TheBook)

suit_namesrank_names 같은 변수는 클래스 내부에 정의되지만, 메서드 바깥에 정의된다. 이런 변수는 클래스 객체 Card와 연관되어 있으므로 클래스 속성이라고 한다.

suitrank처럼 특정 인스턴스에만 연관되는 변수를 인스턴스 속성(instance attribute)이라고 해서 클래스 속성과 구분한다.

두 가지 속성 모두 점 표기법을 사용해 접근한다. 예를 들어 _ _str_ _에서 selfCard 객체이고, self.rankCard 객체의 rank가 된다. 마찬가지로 Card는 클래스 객체이고, Card.rank_namesCard 클래스와 연관된 문자열 리스트가 된다.

모든 카드는 문양과 순위가 있지만, suit_namesrank_names는 오직 하나만 존재한다.

이들 표현을 모두 모아서 Card.rank_names[self.rank]라고 쓰면 Card 클래스의 rank_names 리스트에 객체 selfrank 속성을 인덱스로 사용해서 이에 해당하는 문자열을 선택하라는 뜻이 된다.

순위가 0인 카드는 없으므로 rank_names의 첫 번째 원소는 None이 된다. None0번째로 포함해두면 인덱스 2를 문자열 '2'로 매핑하는 속성을 얻을 수 있다. 이런 꼼수를 사용하고 싶지 않다면 리스트 대신 사전을 사용할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.