我已經用構造函數構建了一個類。這個想法是,如果沒有指定等級和/或套裝,默認情況下應該隨機生成一個PlayingCard對象。如果指定了無效的服裝或等級,則不應創建對象。我相信這是行得通的,但我不知道該怎麼做例外。我想驗證在排名或訴訟無效的情況下拋出的唯一例外是我指定的例外。我很困惑爲什麼有一個'NameError'說實例沒有'suit'屬性,因爲我在編寫raise語句時沒有指定它。類和異常
另外,我想使課堂靈活,使用戶定義的點數和花色不需要創建實例時傳遞的字符串,但我似乎無法得到它的工作。如果有人能指出我正確的方向或解釋爲什麼我不想這樣做,這將不勝感激。
class PlayingCard:
ranks = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
suits = ['Spades', 'Hearts', 'Clubs', 'Diamonds']
def __init__(self, rank = None, suit = None):
if rank is None: self.rank = PlayingCard.ranks[rand.randint(0,12)]
elif rank in PlayingCard.ranks: self.rank = rank
if suit is None: self.suit = PlayingCard.suits[rand.randint(0,3)]
elif suit in PlayingCard.suits: self.suit = suit
if self.rank not in PlayingCard.ranks or self.suit not in PlayingCard.suits: raise NameError('Invalid Suit or Rank')
>>> c1 = PlayingCard('15','Diamonds')
Traceback (most recent call last):
File "<pyshell#63>", line 1, in <module>
c1 = PlayingCard('15','Diamonds')
File "C:\Python27\poker.py", line 26, in __init__
if self.rank not in PlayingCard.ranks or self.suit not in PlayingCard.suits: raise NameError('Invalid Suit or Rank')
AttributeError: PlayingCard instance has no attribute 'rank'
>>> c2 = PlayingCard('A', 'Swords')
Traceback (most recent call last):
File "<pyshell#64>", line 1, in <module>
c2 = PlayingCard('A', 'Swords')
File "C:\Python27\poker.py", line 26, in __init__
if self.rank not in PlayingCard.ranks or self.suit not in PlayingCard.suits: raise NameError('Invalid Suit or Rank')
AttributeError: PlayingCard instance has no attribute 'suit'
旁白:不是'PlayingCard.ranks [rand.randint(0,12)]',你可以用'rand.choice( PlayingCard.ranks)'或'rand.choice(self.ranks)'。 (假設你的'rand'是'random'模塊。) – DSM