Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于同一父类多次实例化子类_Python_Oop_Object_Super_Superclass - Fatal编程技术网

Python 基于同一父类多次实例化子类

Python 基于同一父类多次实例化子类,python,oop,object,super,superclass,Python,Oop,Object,Super,Superclass,假设您想要构建一副52张扑克牌。我有以下Python中的Deck类: class Deck(collections.deque): """Creates a deck of 52 playing cards""" def __init__(self) -> None: super().__init__( map( Card, itertools.product(

假设您想要构建一副52张扑克牌。我有以下Python中的
Deck
类:

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
。这很有效。但是,现在我想创建另一个名为
deck
的类,它包含k个deck,具体取决于用户输入。我就是不知道如何正确地实例化这个类。什么是Pythonic方法来实例化
Deck
,使其包含k
Deck
对象或52*k
Card
对象


编辑:
Deck
包含几种方法,例如
shuffle()
deal()
。我想从
牌组
中访问这些方法,这样我可以一次洗牌所有k牌组,或者处理52*k牌中的一张,而无需编写逻辑来处理几个孤立的对象(处理第53张牌需要处理牌组2中的第一张牌,等等)。

我简化了您的设置,但是,使用这种更简单的设置,下面的代码应该可以工作。希望有帮助

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

Deck
可能只是一个
Deck
对象的列表<代码>[Deck()用于范围内(42)]谢谢,这可能是一种方法。请注意,
Deck
对象有几种方法,例如
shuffle()
deal()
(未显示,因为它会以某种方式弄乱样式)。如何访问这些?输出现在是一个列表对象。您可以在每个
Deck
实例上访问它<代码>套牌[0]。shuffle()等。谢谢,但在这种情况下,无法对
套牌进行洗牌,只能对每个
套牌
对象进行洗牌。我会相应地更新我的问题。是的。“洗牌”意味着什么?你只能洗牌每副牌。如果你想洗牌每一副牌,你需要迭代你的牌列表并洗牌每一副牌。如果你想洗牌你的牌组列表,也就是说,将牌组实例列表随机排列,然后你洗牌该列表。这与
牌组无关。洗牌
。当然,您可以在一个假设的
Deck
类上实现它作为一个方法,这个类同样与
Deck
无关。