表示结构的最佳方式,其中子类就像具有一个对象的超类

问题描述 投票:1回答:1

[我想表示一种类似于无序纸牌的结构(例如在Python 3.7中,该结构具有可以将一张纸牌视为大小为1的纸牌的特性。

class Deck:
    def __init__(self, cards, owner):
        self.owner = owner
        self.cards = cards


class Card(Deck):
    def __init__(self, number, suit, owner):
        self.number = number
        self.suit = suit
        super().__init__({self}, owner)

    def __eq__(self, other):
        return self.number == other.number and self.suit == other.suit and self.owner == other.owner

    def __hash__(self):
        return hash((self.number, self.suit, self.owner))


card = Card(5, 'clubs', 'me')

(以上返回AttributeError: 'Card' object has no attribute 'owner'

如果要订购我的卡座,这将很简单,因为Card.__init__()只会将列表[self]传递到Deck.__init__()。但是,我不能只将{self}传递给Deck.__init__(),因为Card.__hash__()可能需要设置Deck属性!有很多变通办法;我可以简单地在self.owner = owner中设置Card.__init__(),也可以将[self]传递给Deck.__init__(),然后在正文中设置self.cards = set(cards),但对我来说,这似乎很奇怪,代码的其他部分应该取决于甲板选择存储其卡。因此,我的问题不是如何code这种关系,而是解决这种关系的最佳方法,这样我就不必担心这些问题。有什么想法吗?我搜索了这个问题,但没有找到任何东西,但这很简单,因此如果重复,我深表歉意。感谢您的阅读!

编辑:如果一副纸牌对我的结构不是一个很好的类比,(希望)更准确的类比将是一个多项式,它是一个多项式的总和,但每个多项式也是一个多项式,仅以自身为一项。

我想表示一种类似于无序纸牌的结构(例如在Python 3.7中),该结构具有可以将一张纸牌视为大小为1的纸牌的特性。类别Deck:...

python inheritance hash subclass self-reference
1个回答
0
投票
我认为这里的问题是,您的想法是“一张卡片可以看作一副大一号的卡片。”不够连贯,您偶然发现了一个很好的具体说明。]

一张卡片的甲板与一张卡片在根本上是不同的概念,为了使卡片甲板存在,非甲板卡片也必须独立存在。

© www.soinside.com 2019 - 2024. All rights reserved.