我是编程的新手,尤其是Python,所以我对一般的类并不真正熟悉,但是我四处张望,找不到任何有用的东西。我定义了Card和Deck类别,在Deck类别中,有一个交易功能,该交易交易顶牌。代码首次运行时,每当我尝试发行另一张卡时,程序都会返回“ TypeError:'Card对象不可调用”。这是代码:
import random
deck = []
class Card:
def __init__(self, suit, value):
self.suit = suit
self.value = value
def __repr__(self):
return "The {} of {}".format(self.value, self.suit)
class Deck:
def __init__(self):
suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades']
values = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King']
for i in suits:
for j in values:
deck.append(Card(i, j))
def __repr__(self):
return "There are {} cards left in the deck".format(len(deck))
def shuffle(self):
if len(deck) == 52:
random.shuffle(deck)
else:
Deck()
deck.shuffle()
def deal(self):
self.deal = deck[0]
deck.remove(self.deal)
return self.deal
d1 = Deck()
d1.shuffle()
print(d1.deal())
print(d1.deal())
print(d1)
在第二个“ print(d1.deal())”上,程序在处理了第一张卡后返回错误,并且当我调试它时,该错误仅在该行中发生。有人知道怎么了吗?预先感谢!
答案 0 :(得分:1)
在Deck.deal方法的第一行中,您用deck[0]
覆盖了deal方法。
在Python中,方法只是一种属性,因此它们在相同的名称空间中。
答案 1 :(得分:1)
您正在重写方法。交易功能需要进行以下更改:
def deal(self):
self.card = deck[0]
deck.remove(self.card)
return self.card
答案 2 :(得分:1)
deal
方法被其内部的第一条语句覆盖。如果您将方法更改为类似
def deal(self):
self.top_card = deck[0]
deck.remove(self.top_card)
return self.top_card
它将起作用。如果可用,请考虑为您的文本编辑器安装pylint扩展名。它给出了一个有用的错误:“在python第33行中定义的属性隐藏了此方法。”