객체는 init이라는 특별한 멤버 함수를 가지고 있습니다.
이 멤버 함수는 생성자(Constructor) 라고 불립니다.
객체가 생성될 때 생성자는 자동으로 호출됩니다.
FACES = list(range(2, 11)) +
['Jack', 'Queen', 'King', 'Ace']
SUITS = ['Clubs', 'Diamonds', 'Hearts', 'Spades']
Class Card(object):
"""A Blackjack card."""
def __init__(self, face, suit):
assert face in FACES and suit in SUITS
self.face = face
self.suit = suit
card_string()함수를 사용하지 않고도 카드 내용을 문자열로 바꾸는 방법이 있습니다.
str(card) 는 card의 특별한 멤버 함수 str 를 호출합니다.
class Card(object):
"""A Blackjack card."""
"""Already defined __init__ and value methods"""
def __str__(self):
article = "a "
if self.face in [8, "Ace"]:
article = "an "
return (article + str(self.face) + " of" + self.suit)
그러면
class Card(object):
"""A Blackjack card."""
"""Already defined __init__ and value methods"""
def string(self):
article = "a "
if self.face in [8, "Ace"]:
article = "an "
return (article + str(self.face) + " of " + self.suit)
for card in hand:
print(card.string(), "has value", card.value())
# card.string() 대신에 간편하게 card를 쓸 수 있다.
for card in hand:
print(card, "has value", card.value())
객체에서 비교 연산자 (==, !=, < 등)를 사용하면 예상과 다른 결과가 나올 수 있습니다.
사용자의 생각대로 비교 연산자를 통해 객체를 비교하기 위해서는 다음과 같이 정의를 해야 합니다.
class Card(object):
"""A Blackjack card."""
"""Already defined other methods"""
def __eq__(self, rhs):
return (self.face == rhs.face and self.suit == rhs.suit)
def __ne__(self, rhs):
return not self == rhs