Создание дочернего класса несколько раз на основе одного и того же родителя - PullRequest
0 голосов
/ 27 мая 2020

Допустим, вы хотите собрать колоду из 52 игральных карт. У меня есть следующий класс Deck в Python:

class Deck(collections.deque):
    """Creates a deck of 52 playing cards"""
    def __init__(self) -> None:
        super().__init__(
            map(
                Card,
                itertools.product(
                    Suit.__members__.values(), Value.__members__.values()
                ),
            )
        )

Как видно, он наследуется от collections.deque и полагается на три других класса, а именно Card, Suit и Value. Это работает. Однако теперь я хотел бы создать другой класс с именем Decks, содержащий k колод, в зависимости от ввода пользователя. Я просто не могу понять, как правильно создать экземпляр этого класса. Что такое Pythoni c способ создания экземпляра Decks, который либо содержит k Deck объектов, либо 52 * k Card объектов?

edit: Deck содержит несколько методов, таких как shuffle() и deal(). Я хотел бы получить доступ к этим методам из Decks, чтобы я мог перетасовать все k колоды сразу или раздать одну из 52 * k карт без записи logi c в разобраться с несколькими изолированными объектами (для раздачи 53-й карты потребуется раздача 1-й карты из колоды 2 и т. д. c.).

.

1 Ответ

1 голос
/ 27 мая 2020

Я немного упростил вашу настройку, но с этой более простой настройкой код ниже должен работать. Надеюсь, это поможет!

import collections
import itertools

class Deck(collections.deque):
    """Creates a deck of 52 playing cards"""
    def __init__(self) -> None:
        super().__init__(
                itertools.product(
                    range(13), ['♧','♢','♥','♤']
            )
        )


class Decks(collections.deque):
  def __init__(self, decks):
    deck = Deck()
    for i in range(decks-1):
      deck.extend(Deck())
    super().__init__(
      deck
    )

decks = Decks(3)
print(len(decks))
>> 156
...