2017-05-13 3 views
1

私はブラックジャックシミュレータのフレームワークをレイアウトしています。Python:パラメータを取得するか、パラメータとして渡してオブジェクトを変更しますか? OOP

私はPlayerクラスとDeckクラスの両方を持っています。私は選手カードを扱う必要があります。

class Deck: 
    def give_cards(self, player, numcards): 
     player.hand.append('function that returns numcards'): 
     return player 

または私はプレーヤーを持っている必要があり、入力としてデッキやカードリストのいずれかを受け入れる機能を持っている:そうは次のように私は、Deck関数にPlayerを渡すことによって、これを行うべきでしょうか?

class Player: 
    def grab_cards(self, deck) 
     self.hand.append(deck.'function that returns numcards') 

これは十分な情報ではない場合は謝罪します。喜んで編集します。私はちょうどこれのためにgoogleに何をするか分からない。私は両方の仕事をすることができると確信していますが、私は好奇心が強いです。皆さんありがとう。

+0

この質問は、Stackoverflowの広範なビットと思われる。しかし、プレイヤーはカードをピックアップするか、またはカードをプレイヤーに渡しますか? –

+2

実世界をモデル化しようとしているなら(必ずしもそうであるとは限りません)、おそらく 'Deck'と' Player'sを使う 'Dealer'を持っているかもしれません。正解はありませんが、[CRCs](http://c2.com/doc/oopsla89/paper.html)をご覧ください –

+0

どちらの機能も、処理されているカードを説明するためにデッキを突然変異させているようです。 – chepner

答えて

1

どちらも実行しないでください。二つの部分にそのタスクを分割:

  • 取得カードをデッキから
  • 手渡しカードをプレイヤーに
getが強くことを示唆しているように私はまた、メソッドのために少し異なる名前を使用することになり

メソッドは呼び出し側に何か(副作用なし)を返します。これは起こっていないことです。

コード(あなたの実際の実装に調整する):

class Deck: 
    def extract_cards(self, numcards): 
     # extract cards from the deck 
     cards = self.cards[:numcards] 
     del self.cards[:numcards] 
     # return that list of card objects 
     return cards 

class Player: 
    def add_cards(self, cards) 
     # simply add the given cards to this player's hand 
     self.hand.append(cards) 

あなたは、このように操作を行うだろう:一つのクラスは、他のについて知っている必要はありません

player.add_cards(deck.extract_cards(5)) 

その方法。

関連する問題