Python 制作一副牌,1次迭代后不可调用
我是编程新手,尤其是Python,所以我对类一般来说并不太熟悉,但我环顾四周,没有找到任何有用的东西。我定义了卡和牌组的类,在牌组类中,我有一个交易函数,它交易最上面的牌。当代码第一次运行时,每当我尝试处理另一张卡时,程序返回“TypeError:”卡对象不可调用。代码如下:Python 制作一副牌,1次迭代后不可调用,python,python-3.x,Python,Python 3.x,我是编程新手,尤其是Python,所以我对类一般来说并不太熟悉,但我环顾四周,没有找到任何有用的东西。我定义了卡和牌组的类,在牌组类中,我有一个交易函数,它交易最上面的牌。当代码第一次运行时,每当我尝试处理另一张卡时,程序返回“TypeError:”卡对象不可调用。代码如下: import random deck = [] class Card: def __init__(self, suit, value): self.suit = suit sel
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())”时,程序在处理第一张卡后返回一个错误,当我调试它时,错误只发生在该行。有人知道怎么了吗?提前谢谢 在Deck.deal方法的第一个lin中,通过
Deck[0]
覆盖deal方法。
在Python中,方法只是一种属性,因此它们位于相同的名称空间。您正在重写该方法。需要对交易功能进行以下更改:
def deal(self):
self.card = deck[0]
deck.remove(self.card)
return self.card
deal
方法被其自身的第一条语句覆盖。如果您将方法更改为
def deal(self):
self.top_card = deck[0]
deck.remove(self.top_card)
return self.top_card
它会起作用的。如果有可用的文本编辑器,请考虑安装PyLink扩展。它给出了一个有用的错误:“python第33行中定义的属性隐藏了这个方法。”调用
deal()
方法会分配给self.deal
,它与刚才调用的方法同名。再次尝试调用它会调用该卡(因为它不是可调用对象而失败),而不是被重写的原始方法。啊,明白了!我刚刚将self.deal更改为一个新变量,现在它可以工作了。谢谢@jasonharper!