我一直在尝试使用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__
返回数据时,会出现错误,并且每当尝试从类中的另一个方法获取数据时,我也会出错。有人可以告诉我我在想什么吗?
答案 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]
以此类推。