簡體   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