带Python的面向对象Black Jack-Deck没有长度?

带Python的面向对象Black Jack-Deck没有长度?,python,Python,我正在尝试用Python创建一个21点游戏。然而,当我尝试洗牌并从我的牌组对象中发牌时,我得到一个错误,表明我的“牌组”对象没有长度。有人能帮忙解决这个问题吗?谢谢 def deal(): deck = Deck() player = Hand() dealer = Hand() random.shuffle(deck) player.add_card(deck.deal_card()) player.add_card(deck.deal_card

我正在尝试用Python创建一个21点游戏。然而,当我尝试洗牌并从我的牌组对象中发牌时,我得到一个错误,表明我的“牌组”对象没有长度。有人能帮忙解决这个问题吗?谢谢

def deal():
    deck = Deck()
    player = Hand()
    dealer = Hand()
    random.shuffle(deck)
    player.add_card(deck.deal_card())
    player.add_card(deck.deal_card())
    dealer.add_card(deck.deal_card())
    dealer.add_card(deck.deal_card())
    prompt()

您可能试图在
Deck
对象本身上使用
len
函数,而不是在
Deck
对象的实例变量
Deck
上使用它。如果
d
是类
Deck
的一个实例,那么应该调用
len(d.Deck)
,或者更好地,为
self.Deck
实现一个getter方法,并使用类似
len(d.get_Deck())
的东西

操作后编辑:

您正试图在
对象本身上调用
shuffle
,而不是在
对象中存储的
列表
组。部分混淆可能是因为您决定将类命名为
Deck
及其实例变量
Deck
。如果您想要
列表
deck
,您需要在
交易
函数中发出
deck=deck().deck

根据评论进行编辑:

当然,您不能在
列表中调用
交易卡
。你能行

def deal():
    deckObject = Deck()
    deckList = deckObject.deck 
    player = Hand()
    dealer = Hand()
    random.shuffle(deckList)
    player.add_card(deckObject.deal_card())
    player.add_card(deckObject.deal_card())
    dealer.add_card(deckObject.deal_card())
    dealer.add_card(deckObject.deal_card())
    prompt()
符号应该很清楚这里的
Deck
对象是什么,以及
Deck
列表是什么

deck = Deck() should be deck = Deck().deck 
Deck()
上尝试
random.shuffle
将导致:

AttributeError: Deck instance has no attribute '__len__'
Deck没有len,其中
Deck()。Deck
指的是您的
\uuuu main\uuuu.Card实例的列表,其长度为

In [42]: d = Deck()

In [43]: d.deck.__len__() # self.deck has a __len__() as it is a list of instances
Out[43]: 52


In [44]: d = Deck()

In [45]: d.__len__()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-45-c2cc108c72f0> in <module>()
----> 1 d.__len__()

AttributeError: Deck instance has no attribute '__len__'
[42]中的
d=Deck()
在[43]:d.deck.self.deck有一个实例列表,因为它是一个实例列表
Out[43]:52
在[44]中:d=甲板()
在[45]中:d.______;len ___;()
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
---->一维
AttributeError:甲板实例没有属性“\uuuu len\uuuu”
将序列x移动到位。可选参数random是一个0参数函数,在[0.0,1.0]中返回一个随机浮点;默认情况下,这是函数random()。 请注意,即使对于非常小的len(x),x的置换总数也大于大多数随机数生成器的周期;这意味着长序列的大多数置换永远不会生成


注意
len(x)

您是如何得到错误的?您是否试图调用类似
len(deck)
?您可以共享产生错误的代码吗?另外,您有一个
deck
类,但您没有显示名为
deck
的对象。如果我调用
x=deck()
那么
len(x.deck)
我得到了
52
。这是完整的代码。如果你把你的问题减少到一个最小的例子(可能是20行左右),这对其他人可能真的很有帮助只显示与重现您的问题相关的内容。我知道获得这样一个最小的示例是一项工作,但它大大增加了您的问题的价值,并使答案对社区更有价值。:)他为什么需要getter方法?@Padraic Cunningham他不需要getter方法。为什么会像您建议的那样更好d?@Padraic Cunningham为类的使用提供了一个接口,而不必知道它的内部结构。在我看来,你应该只编写一些类,当你完全确定自己在做什么时,这些类会迫使你在它们的肠道里摸索。OP看起来像这样的人吗?@user3002315我在我的帖子中解释过,哪部分是unclear?简而言之:x=Deck()创建一个具有实例变量Deck的对象。您可以使用点符号访问此实例变量,即Deck().deck或x.deck。shuffle函数仅适用于列表。deck对象不是列表,但其实例变量deck是。至于您的新问题:您需要在deck对象上调用deal_card,而不是在列表组上。