多重继承问题
Multiple Inheritance Issue
我遇到了一个似乎无法克服的问题。
我正在创建 classes,它们负责制作 Blackjack 游戏的部分功能。我遇到的问题是我似乎无法访问 class 'GetValue' 中的“single_card”变量。 single_card 是从 Deck class 中的方法返回的,但我似乎无法在 GetValue class 中访问它。
我一直在研究多重继承,但没有成功,任何人都可以帮我找出我可能出错的地方,并帮助我解决问题。
当前错误:
第 40 行,在 init__Card.__init(self)
类型错误:init() 缺少 2 个必需的位置参数:'suit' 和 'rank'
非常感谢!
P.S - 我是 Whosebug 的新用户,如果我的提问技巧不是很好,我深表歉意!
代码如下:
'''
values = {'Two': 2, 'Three': 3, 'Four': 4, 'Five': 5, 'Six': 6, 'Seven': 7, 'Eight': 8, 'Nine': 9, 'Ten': 10,
'Jack': 10,'Queen': 10, 'King': 10, 'Ace': 11}
class Deck():
def __init__(self):
suits = ['Hearts', 'Diamonds', 'Spades', 'Clubs']
ranks = ['Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace']
self.deck = [] # start with an empty list
for suit in suits:
for rank in ranks:
self.deck.append(Card(suit, rank))
def shuffle(self):
random.shuffle(self.deck)
def __str__(self):
deck_comp = ""
for card in self.deck:
deck_comp += '\n'+ card.__str__()
return "The deck has: "+deck_comp
def deal(self):
self.single_card = self.deck.pop()
return self.single_card
class Card():
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank
def __str__(self):
return self.rank+" of "+self.suit
class GetValue(Deck, Card):
def __init__(self):
Deck.__init__(self)
Card.__init__(self)
self.cardtype = Deck.single_card.split()
self.cardval = values.get(self.cardtype[0])
print(self.cardval)
mydeck = Deck()
print(mydeck.deal())
myval = GetValue()
'''
您应该在 GetValue
的 init 方法中尝试访问 single_card
之前添加 self.deal()
。
print(mydeck.deal())
正在影响 Deck
的另一个实例,它不是 myval
的一部分
好像value是卡牌等级对应的数值,是卡牌的属性。所以你可以给 Card
一个 get_value
方法 returns 值:
class Card:
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank
def __str__(self):
return self.rank + " of " + self.suit
def get_value(self):
return values[self.rank]
mydeck = Deck()
card = mydeck.deal()
print(card)
print(card.get_value())
另一种方法可能是将值传递给 Card.__init__
,因此它可以作为一个简单的属性进行访问。
class Card:
def __init__(self, suit, rank, value):
self.suit = suit
self.rank = rank
self.value = value
card = Card('Hearts', 'three', 3)
print(card.value)
我遇到了一个似乎无法克服的问题。
我正在创建 classes,它们负责制作 Blackjack 游戏的部分功能。我遇到的问题是我似乎无法访问 class 'GetValue' 中的“single_card”变量。 single_card 是从 Deck class 中的方法返回的,但我似乎无法在 GetValue class 中访问它。
我一直在研究多重继承,但没有成功,任何人都可以帮我找出我可能出错的地方,并帮助我解决问题。
当前错误: 第 40 行,在 init__Card.__init(self) 类型错误:init() 缺少 2 个必需的位置参数:'suit' 和 'rank'
非常感谢!
P.S - 我是 Whosebug 的新用户,如果我的提问技巧不是很好,我深表歉意!
代码如下: '''
values = {'Two': 2, 'Three': 3, 'Four': 4, 'Five': 5, 'Six': 6, 'Seven': 7, 'Eight': 8, 'Nine': 9, 'Ten': 10,
'Jack': 10,'Queen': 10, 'King': 10, 'Ace': 11}
class Deck():
def __init__(self):
suits = ['Hearts', 'Diamonds', 'Spades', 'Clubs']
ranks = ['Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace']
self.deck = [] # start with an empty list
for suit in suits:
for rank in ranks:
self.deck.append(Card(suit, rank))
def shuffle(self):
random.shuffle(self.deck)
def __str__(self):
deck_comp = ""
for card in self.deck:
deck_comp += '\n'+ card.__str__()
return "The deck has: "+deck_comp
def deal(self):
self.single_card = self.deck.pop()
return self.single_card
class Card():
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank
def __str__(self):
return self.rank+" of "+self.suit
class GetValue(Deck, Card):
def __init__(self):
Deck.__init__(self)
Card.__init__(self)
self.cardtype = Deck.single_card.split()
self.cardval = values.get(self.cardtype[0])
print(self.cardval)
mydeck = Deck()
print(mydeck.deal())
myval = GetValue()
'''
您应该在 GetValue
的 init 方法中尝试访问 single_card
之前添加 self.deal()
。
print(mydeck.deal())
正在影响 Deck
的另一个实例,它不是 myval
好像value是卡牌等级对应的数值,是卡牌的属性。所以你可以给 Card
一个 get_value
方法 returns 值:
class Card:
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank
def __str__(self):
return self.rank + " of " + self.suit
def get_value(self):
return values[self.rank]
mydeck = Deck()
card = mydeck.deal()
print(card)
print(card.get_value())
另一种方法可能是将值传递给 Card.__init__
,因此它可以作为一个简单的属性进行访问。
class Card:
def __init__(self, suit, rank, value):
self.suit = suit
self.rank = rank
self.value = value
card = Card('Hearts', 'three', 3)
print(card.value)