首页 > 解决方案 > 'list' 和 'object' 作为类定义中的参数的解释

问题描述

有人可以解释一下 Card 和 StandardDeck 类中“object”和“list”参数的用途吗?我发现这方面的信息很少。

Phycharm 对 Card() 类中的“对象”进行了说明: 类层次结构的基类。调用时,它不接受任何参数并返回一个新的无特征实例,该实例没有实例属性并且不能被赋予任何属性。

由于“对象”参数,类卡是否被视为基类?是否super().__init__()从类 StandardDeck 继承自类 Card?我真的希望有人能给我一个很好的解释,我已经挣扎了几个小时。

def main():
    class Card(object):
        def __init__(self, value, suit):
            self.value = value
            self.suit = suit


    class StandardDeck(list):
        def __init__(self):
            super().__init__()
            suits = list(range(4))
            values = list(range(13))
            [[self.append(Card(i, j)) for j in suits] for i in values]

    deck = StandardDeck()
    for card in deck:
        print(card)

main()

标签: pythonclassinheritanceparameters

解决方案


object是派生类的基类(也称为super类)Card。这意味着Card继承基类的所有功能和状态(正如其他人所说,无论如何这都是隐含的),并且它允许Card根据需要覆盖(或更改)方法。另一种说法是Cardobject.

同样,list是 的基类StandardDeck

我还要补充一点,这不是一个特别好的设计。例如,list有一个名为clear(). clear()对a意味着什么StandardDeck?使用实现细节(实例变量)所需的任何数据结构会是更好的设计。这有时表示为未能满足Liskov 替换原则 (LSP)


推荐阅读