[英]Can a child class inherit its base class root validators in pydantic?
[英]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.