Проблема множественного наследования - PullRequest
0 голосов
/ 02 ноября 2019

Я столкнулся с проблемой, которую не могу решить.

Я создаю классы, которые отвечают за часть функциональности для создания игры в Блэкджек. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить доступ к переменной'ingle_card 'в классе' GetValue '. single_card возвращается из метода в классе Deck, но я не могу получить к нему доступ в классе GetValue.

Я безуспешно исследовал множественное наследование. Может ли кто-нибудь помочь мне определить, где я могу ошибаться, и научить меня, как исправить проблему.

Текущая ошибка: строка 40,в init__Card .__ init (self) TypeError: init () отсутствует 2 обязательных позиционных аргумента: 'suit' и 'rank'

Заранее большое спасибо!

PS - Я новичок в работе со стеком, поэтому прошу прощения, если мои навыки в вопросе не так велики!

Код ниже: '' '

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()

' ''

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

Кажется, что значение относится к числовому значению, соответствующему рангу карты, поэтому это атрибут карты. Таким образом, вы могли бы дать Card метод get_value, который возвращает значение:

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)
0 голосов
/ 02 ноября 2019

Вы должны добавить self.deal() перед попыткой доступа к single_card в методе инициализации GetValue.

print(mydeck.deal()) влияет на другой экземпляр Deck, который не является частью myval

...