首页 > 解决方案 > Python - 访问另一个类中的类属性,这不是它的孩子

问题描述

我正在做一些家庭作业,我们从那里开始 OOP,但我对此并没有信心。

假设我有 X 类 Card 实例,其中 Card 是另一个子类(如卡片类型等)的父类,但总的来说,我将它们全部保存在变量“实例”中,例如 20 个实例。我需要将这些实例中的 10 个放入另一个名为 Deck 的类中,我将在其中创建新列表“deck”并将这 10 张卡放入其中,然后我会将它们分成两半给 2 个玩家。

我的问题是我只是不知道如何将这些实例从类 Card 移动到类 Deck 并将它们拆分为这两个玩家的后记。感谢您的帮助,我希望我说清楚了。

class Card:

    instances = []

    def __init__(self, name):
         self.__name = name
         self.__class__.instances.append(self)

class Deck:
    
    deck = []

    def __init__(self):
         self.__class__.deck.append(Card.instances)    


class Player(Deck):
     
     def __init__(self, name, deck):
         super().__init__(deck)
         self.__name = name


def main():

     card1 = Card('Card1')
     card2 = Card('Card2')
     card3 = Card('Card3')

     p1 = Player('Tim')
     p2 = Player('Jill')

if __name__ == '__main__':
     main()     

标签: pythonoop

解决方案


因此,首先,您实现Deck了它包含 all 的列表Cards。你会想要init一个只有它的名字的牌组(可能还有几张起始牌),然后在这个类中有方法来添加和取出任何其他牌。您可以为此使用以下代码:

class Deck:

    def __init__(self, init_cards=None):
        self.deck = []
        if init_cards:
            self.deck.extend(init_cards)    
    
    def add_card(self, card):
        self.deck.append(card)
    
    def withdraw_card(self, card_name):
        return_card = None
        for card in self.deck:
            if card.name == card_name:
                return_card = self.deck.remove(card)
        return return_card

接下来,您可以使用他们的卡片创建卡片组,并使用类中的函数在卡片组之间传递卡片Deck。给每个玩家一个牌组作为变量,然后引用它。


推荐阅读