【问题标题】:create object in a parent class在父类中创建对象
【发布时间】:2019-08-15 14:06:25
【问题描述】:

我正在编写一个纸牌游戏。如何通过父类将我已经创建的卡片分配给对象?

我试图用这样的方式创建一个新对象:

name = Card(suit1, face1, value1)

但由于我在此之前声明了名称,所以它不能正常工作。 如果我在定义变量 name 后打印名称,则输出为:7Hearts, 7Diamonds, 7Clubs, 7Spades, 8Hearts, 8Diamonds... 我想在 Card 类中创建对象,以便预期输出 print(7Hearts.suit, 7Hearts.face, 7Hearts.value)

>>> (Hearts, 7, 7)

或为 print(AceSpades.suit, AceSpades.face, AceSpades.value)

>>> (Spades, Ace, 11)
from random import *
class Card(object):
    def __init__(self, suit, face, value):
        self.suit = suit
        self.face = face
        self.value = value


class Deck(Card):
    def __init__(self):

        suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades']
        ranks = range(7, 15)
        for rank1 in ranks:
            for suit1 in suits:
                if rank1 == 11:
                    face1 = 'Jack'
                    value1 = 2
                elif rank1 == 12:
                    face1 = 'Queen'
                    value1 = 3
                elif rank1 == 13:
                    face1 = 'King'
                    value1 = 4
                elif rank1 == 14:
                    face1 = 'Ace'
                    value1 = 11
                else:
                    face1 = str(rank1)
                    value1 = rank1

                name = "{0}{1}".format(face1, suit1)

【问题讨论】:

  • Deck 不是Card 的一种;它是卡片的集合。不要在这里使用继承。
  • 不太清楚你在这里问什么。在示例代码中,您没有将变量 name 用于任何事情。我也同意@chepner,没有理由让Deck 成为Card 的子类。这没有任何意义。也许您只是想列出Card 对象?

标签: python python-2.7 class


【解决方案1】:

您在这里既不需要也不想继承。 Deck 只是卡片的集合。

class Deck(object):
    def __init__(self):
        self.cards = []
        suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades'],
        ranks = {11: 'Jack', 12: 'Queen', 13: 'King', 14: 'Ace'}
        values = {11: 2, 12: 3, 13: 4, 14: 11}
        for suit in suits:
            for rank in range(7,15):
                card_rank = ranks.get(rank, str(rank))
                value = values.get(value, value)
                self.cards.append(Card(suit, card_rank, value))

您可以使用继承来表示不同种类的牌组:扑克牌组、pinochle 牌组等。Deck 本身将具有诸如洗牌之类的方法,但每个子类都会构造Card适合该甲板的对象。

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 2010-10-12
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2017-07-18
    相关资源
    最近更新 更多