Python中的OOP卡牌

时间:2018-08-19 22:36:05

标签: python oop object-oriented-analysis

我一直在尝试使用Python学习面向对象的编程,并且希望从对纸牌游戏进行编程开始。我想尝试编写几种不同的游戏,所以我想从一个甲板类开始,无论我尝试制作哪种游戏,都可以调用它。

我可以通过函数获得基本行为,而且我不知道如何使其成为类。我首先想到了这个:

class Deck:

    def shuffle():
        cards = []
        suits = ['H', 'D', 'S', 'C']
        for suit in suits:
            for i in range(1, 14):
                cards.append((i, suit))
        shuf_deck = random.sample(cards, len(cards))
        return shuf_deck 

以上方法有效,但是效果不是很好。它只是一个功能,一方面,它完成两件事,即创建牌组并对其进行改组。看来这些应该是不同的。对于__init__函数来说,似乎创建一个开始的牌组似乎是一项不错的工作。基于another question,我得出了以下结论:

class Deck:
    def __init__(self):
        self.suits = ['Hearts', 'Diamonds,' 'Spades', 'Clubs']
        self.values = range(1, 14)
        self.cards = []
        for Card in itertools.product(self.suits, self.values):
            self.cards.append(Card)

    def shuffle():
        # Not quite sure what to do here yet
        return self.cards

deck = Deck()
print(deck) 

但这不起作用。 __init__函数中的代码成功创建了卡片组,但是我不太能将其“客观化”。我已经尝试了几种不同的方法,它要么返回类似<__main__.Deck object at 0x7f56969f5630>的内容,我相信它是对象本身的内存地址,或者出现某种错误,语法无效,属性错误等。似乎无法从__init__获取数据;当我尝试直接从__init__返回数据时,会出现错误,并且每当尝试从类中的另一个方法获取数据时,我也会出错。有人可以告诉我我在想什么吗?

1 个答案:

答案 0 :(得分:1)

deck是实际的Deck对象。 print(deck)将为您提供对象的内存地址。

通过“从__init__获取数据”,我相信您有兴趣获取属性:

deck.suits # this will give you ['Hearts', 'Diamonds,' 'Spades', 'Clubs']
deck.values # this will be [1,2, ..13]

以此类推。