Python:我是通过获取参数还是作为参数传递来更改对象? OOP

时间:2017-05-13 22:55:53

标签: python oop

我正在为二十一点模拟器制定框架。

我有一个Player类和一个Deck类。我需要交易球员卡。我应该将Player传递给Deck函数,如下所示:

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

或者我应该让玩家有一个功能,它接受牌组或牌列表作为输入?

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

如果这个信息不够,我很抱歉,我很乐意编辑。我只是不确定要为这个谷歌做什么。我相信我可以同时工作,但风格和最好的设计我很好奇。谢谢大家。

1 个答案:

答案 0 :(得分: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))

这样一个班级不需要知道另一个班级。