[英]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.