Я пытаюсь использовать методы 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"**
1
robertsci 26 Июн 2019 в 10:33

3 ответа

Лучший ответ

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

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
Kushan Gunasekera 26 Июн 2019 в 07:51

Проблема в том, что вы переопределяете параметр 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
0
Kushan Gunasekera 6 Июл 2019 в 16:29

Как я упоминал в комментариях, вам не нужно, чтобы 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')
1
Devesh Kumar Singh 26 Июн 2019 в 07:52