繁体   English   中英

如何从子 class 对象列表中的基础 class 继承

[英]Howto inherit from a base class within a list of child class objects

来自 www 的随机示例:

class Deck(object):
    def __init__(self, name):
        self.cards = []
        self.name = name
        for suit in range(4):
            for rank in range(1, 14):
                self.cards.append(Card(suit, rank))

    def print_deck(self):
        for card in self.cards:
            print(card)

class Card(Deck):
    suits = ["Clubs", "Diamonds", "Hearts", "Spades"]
    ranks = ["narf", "Ace", "2", "3", "4", "5", "6", "7",
             "8", "9", "10", "Jack", "Queen", "King"]

    def __init__(self, suit=0, rank=0):
        self.suit = suit
        self.rank = rank

    def __str__(self):
        return (self.ranks[self.rank] + " of " + self.suits[self.suit])



d = Deck("magic_cards")
d.print_deck()

我想在我的卡 class 中使用来自 Deck 的变量name 我已经在子 class 中尝试了super(Deck, self).init(name) 然后我收到如下错误:

TypeError: object.__init__() takes exactly one argument (the instance to initialize)

如何正确执行此步骤?

编辑:我可以将 class 属性传递给我的孩子 class 中的某些方法。 这已经足够好了。

class Deck():
    def __init__(self, name):
        self.cards = []
        self.name = name
        for suit in range(4):
            for rank in range(1, 14):
                self.cards.append(Card(suit, rank))

    def print_deck(self):
        for card in self.cards:
            print(card)

class Card():
    suits = ["Clubs", "Diamonds", "Hearts", "Spades"]
    ranks = ["narf", "Ace", "2", "3", "4", "5", "6", "7",
             "8", "9", "10", "Jack", "Queen", "King"]

    def __init__(self, suit=0, rank=0):
        self.suit = suit
        self.rank = rank

    def __str__(self):
        return (self.ranks[self.rank] + " of " + self.suits[self.suit])

    def printchild(self, name):
        return name



d = Deck("magic_cards")
c = d.cards[0]
print(c.printchild(d.name))

类可以看作是 object 构造函数或 object 模板。

例如,您有一张卡片 -但您有什么类型的卡片? 它的西装是什么? 它的号码是多少。

您格式化代码的方式有点奇怪。 您不能真正将 class 传递给另一个 class object。 以我之前给出的解释,为什么要将模板传递给模板?

您可能想尝试这样的事情:

class card():
    
    def __init__(suit,rank):
        self.suit = suit
        self.rank = rank


ace_of_spades = card("spade","ace")

deck = []
deck.append[ace_of_spades]

在我看来,你有一个一般的设计问题。 Inheritance 是一个关系。 卡片不应该是套牌,但有对其套牌的引用,所以我更喜欢在此处包含 inheritance:

class Deck(object):
    def __init__(self, name):
        self.cards = []
        self.name = name
        for suit in range(4):
            for rank in range(1, 14):
                self.cards.append(Card(suit, rank, self))   # pass a Deck ref. to Card

    ...

class Card():
    ...
    def __init__(self, suit=0, rank=0, deck=None):
        self.suit = suit
        self.rank = rank
        self.deck = deck
    ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM