We'll take a look at a few other, more advanced __init__() techniques. These aren't quite so universally useful as the techniques in the previous sections.
The following is a definition for the Player class that uses two Strategy objects and a table object. This shows an unpleasant-looking __init__() method:
class Player:
def __init__(
self,
table: Table,
bet_strategy: BettingStrategy,
game_strategy: GameStrategy
) -> None:
self.bet_strategy = bet_strategy
self.game_strategy = game_strategy
self.table = table
def game(self):
self.table.place_bet(self.bet_strategy.bet())
self.hand = self.table.get_hand()
if self.table.can_insure(self.hand):
if self.game_strategy.insurance(self.hand):
self.table.insure(self.bet_strategy.bet())
...