Как назвать и создать несколько экземпляров класса в Python? - PullRequest
0 голосов
/ 12 февраля 2019

Я новичок в программировании и обучении ООП.Я хотел создать колоду игральных карт, поэтому я создал класс Card с числовым атрибутом и атрибутом масти.Затем я хотел создать список из 52 экземпляров этого класса, чтобы сделать колоду.я также хочу, чтобы каждый из них был назван как "2_spades", "3_spades", "4_spades" и т. д., но, очевидно, не хочу делать это вручную.

, когда я создал список, используя цикл for инапечатал список, он напечатал расположение экземпляров в памяти, что было понятно, так как я не назвал экземпляры.поэтому я попытался добавить метод str dunder в класс, который вернул номер и костюм экземпляра.но это не сработало.

class Card:
    def __init__(self, number, suit, trump='not the trump'):
        self.number = number
        self.suit = suit
        self.trump = trump

    def make_trump(self):
        self.trump = 'the trump'

    def remove_trump(self):
        self.trump = 'not the trump'

    def __str__(self):
        return f'{self.number} of {self.suit}'


suits = ['spades', 'hearts', 'clubs', 'diamonds']
deck = []
for Suit in suits:
    for i in range(13):
        deck.append(Card(i. Suit))

print(deck)

, когда я печатаю деку, она дает места памяти для каждого из них.

как я могу создать несколько экземпляров класса Card и назвать каждого из них их number_suit или self.number_self.suit?

1 Ответ

0 голосов
/ 12 февраля 2019

Если вы печатаете list чего-то, что сама list печатает, то его элементы с использованием repr(element):

class Card: 
    def __init__(self, number, suit, trump='not the trump'):
        self.number = number
        self.suit = suit
        self.trump = trump

    def make_trump(self):
        self.trump = 'the trump'

    def remove_trump(self):
        self.trump = 'not the trump'

    def __str__(self):
        return f'{self.number} of {self.suit}'

    # provide the __repr__ method to be the same as str so iterables
    # when printing this will not print the memory adress but the more
    # meaningfull representation
    def __repr__(self):
        return str(self)   # same as str

должны выполнить трюк

Вы можете просто

suits = ['spades', 'hearts', 'clubs', 'diamonds']
deck = []
for Suit in suits:
    for i in range(13):
        deck.append(Card(i, Suit))   # fix this

print(deck)

Вывод:

[0 of spades, 1 of spades, 2 of spades, 3 of spades, 4 of spades, 5 of spades, 
 6 of spades, 7 of spades, 8 of spades, 9 of spades, 10 of spades, 11 of spades, 
 12 of spades, 0 of hearts, 1 of hearts, 2 of hearts, 3 of hearts, 4 of hearts, 
 5 of hearts, 6 of hearts, 7 of hearts, 8 of hearts, 9 of hearts, 10 of hearts, 
 11 of hearts, 12 of hearts, 0 of clubs, 1 of clubs, 2 of clubs, 3 of clubs, 4 of clubs, 
 5 of clubs, 6 of clubs, 7 of clubs, 8 of clubs, 9 of clubs, 10 of clubs, 11 of clubs, 
 12 of clubs, 0 of diamonds, 1 of diamonds, 2 of diamonds, 3 of diamonds, 4 of diamonds, 
 5 of diamonds, 6 of diamonds, 7 of diamonds, 8 of diamonds, 9 of diamonds, 10 of diamonds, 
 11 of diamonds, 12 of diamonds]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...