この質問のあと、他のトランプゲームにも応用が利くようにブラックジャックのコードを書き換えました。
(以下概略)
Python
1# game_components.py 概略 2class Card 3class Deck 4class PlayerBase: 5 self.hands: List[Card] 6 self.bankroll: int 7 8 self.draw() 9 10 @abstractmethod 11 self.score() # @propertyとして実装 12 13class GameBase: 14 self.deck: Deck 15 16 @abstractmethod 17 self.play() 18 19 @abstractmethod 20 self.reset()
Python
1# blackjack.py 概略 2class BlackjackPlayer(PlayerBase): 3 self.score() 4class BlackjackDealer(BlackjackPlayer): 5 self.score_based_strategy() # draw()でディーラーのみ必要 6 7class SimpleBlackjack(GameBase): # ベットなしのブラックジャック 8 self.__init__(): 9 super() 10 self.player: BlackjackPlayer 11 self.dealer: BlackjackDealer 12 self.play() 13 self.reset() 14 15class Blackjack(SimpleBlackjack): # ベットあり 16 self.__init__(): 17 super() 18 self.bet: int 19 self.default_bet: int 20 self.is_double_down: bool
コード全文は長さの制約により乗り切らなかったため、Gistに置いてあります。
blackjack.py | GitHub Gist
いくつかのトランプゲームのルールを調べたうえで、プレイヤーにはそれぞれの手札と種銭が、ゲームの場にはトランプ1組が共通すると判断してPlayerBase
, GameBase
を抽出しました。
今後これらを継承する際もブラックジャックのコードと同様、1つのゲームXxxx
につきclass XxxxPlayer(PlayerBase)
, class XxxxDealer(PlayerBase or XxxxPlayer)
, 賭けなしのclass SimpleXxxx(GameBase)
, 賭けに伴う処理を含めたclass Xxxx(SimpleXxxx)
の高々4つ程度しか作らず、何重にも入れ子になった継承はしないだろうと考えています。
ですが、このコードを書いたあとネットでクラス設計について調べていると、継承よりも委譲を強く推奨する意見が多く見られました。
1重, 2重程度の継承すらも悪のように書かれているものもあるので、初心者としてはどうすればいいのか困惑しています。
趣味で書いているものとはいえ、できれば良いコードにしたいです。
これくらいの規模(継承の深さ?)でも継承は徹底して避けたほうが良いのでしょうか?
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。