Невозможно правильно использовать функцию из другого класса с наследованием класса - PullRequest
1 голос
/ 26 июня 2019

Я пытаюсь использовать методы card_number() и card_suit() из класса Card для определения масти и номера last_card из правил класса

class Card:

    def __init__(self, card):
        self.card = card
        self.number = self.card_number(card)
        self.suit = self.card_suit(card)

    def card_number(self, card):
        card = self.card
        number = card[0]
        return number


    def card_suit(self, card):
        card = self.card
        suit = card[-1]
        return suit

class Rules(Card):

    def __init__(self, last_card, card):
        Card.__init__(self, card)
        self.last_card = last_card
        self.last_card_number = self.card_number(self.last_card)
        self.last_card_suit = self.card_suit(self.last_card)

Похоже, что при доступе к функцииони сохраняют карту и подходят только для переменной карты, также в последней карте

Теперь я получаю:

a = Rules(last_card="As", card = "5c")
print(a.card) -> "5c"
print(a.number)-> "5"
print(a.suit) -> "c"

print("last_card")
print(a.last_card) -> "As"
print(a.last_card_number) -> "5"
print(a.last_card_suit) -> "c"

Я ожидаю:

a = Rules(last_card="As", card = "5c")
print(a.card) -> "5c"
print(a.number)-> "5"
print(a.suit) -> "c"

print("last_card")
**print(a.last_card) -> "As"
print(a.last_card_number) -> "A"
print(a.last_card_suit) -> "s"**

Ответы [ 3 ]

1 голос
/ 26 июня 2019

Как я уже упоминал в комментариях, вам не нужно, чтобы Rules был суперклассом Card, когда вам нужно Rules, чтобы просто содержать два экземпляра Card

. Вы можете изменитьваш класс, чтобы достичь этого следующим образом

class Card:

    #Instantiating instance attributes
    def __init__(self, card):
        self.card = card
        self.number = self.card[0]
        self.suit = self.card[-1]

class Rules:

    #Two instances of Card class
    def __init__(self, last_card, card):
        self.last_card = Card(last_card)
        self.card = Card(card)

a = Rules(last_card="As", card = "5c")
print(a.card.card)
print(a.card.number)
print(a.card.suit)

print(a.last_card.card)
print(a.last_card.number)
print(a.last_card.suit)

Вывод будет

5c
5
c
As
A
s

Вы даже можете избавиться от Rules класса и создать два экземпляра Card классов, ииспользуйте их вместо

last_card = Card('As')
card = Card('5c')
0 голосов
/ 26 июня 2019

Обновите ваш код таким образом,

class Card:

    def __init__(self, card):
        self.card = card
        self.number = self.card_number(card)
        self.suit = self.card_suit(card)

    @staticmethod
    def card_number(card):
        # card = self.card
        number = card[0]
        return number

    @staticmethod
    def card_suit(card):
        # card = self.card
        suit = card[-1]
        return suit


class Rules(Card):

    def __init__(self, last_card, card):
        Card.__init__(self, card)
        self.last_card = last_card
        self.last_card_number = self.card_number(self.last_card)
        self.last_card_suit = self.card_suit(self.last_card)
0 голосов
/ 26 июня 2019

Проблема здесь в том, что вы переопределяете параметр card ваших методов в классе Card:

def card_number(self, card):
    card = self.card
    number = card[0]
    return number


def card_suit(self, card):
    card = self.card
    suit = card[-1]
    return suit

Удалите строки card = self.card здесь, и он должен работать правильно.Это должно выглядеть так:

def card_number(self, card):
    number = card[0]
    return number


def card_suit(self, card):
    suit = card[-1]
    return suit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...