python - '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()
解决方案
object
是派生类的基类(也称为super
类)Card
。这意味着Card
继承基类的所有功能和状态(正如其他人所说,无论如何这都是隐含的),并且它允许Card
根据需要覆盖(或更改)方法。另一种说法是Card
比object
.
同样,list
是 的基类StandardDeck
。
我还要补充一点,这不是一个特别好的设计。例如,list
有一个名为clear()
. clear()
对a意味着什么StandardDeck
?使用实现细节(实例变量)所需的任何数据结构会是更好的设计。这有时表示为未能满足Liskov 替换原则 (LSP)。
推荐阅读
- spring - 存储过程的 Spring Boot Data JPA 默认模式
- github - 从命令行将代码推送到存储库时出错
- python - 如果使用 Python Pandas 的数据框中的另一列不为空,如何填充一列
- html - bootstrap 4 offset-lg 在 Angular 中不起作用
- mysql - ERROR 3822 (HY000) at line: Duplicate check constraint name 'CONSTRAINT_1'
- python - 我在全新的 Ubuntu 安装上同时安装了 anaconda 和 miniconda。我应该预期会遇到问题吗?
- python - 用 Beautiful Soup 创建 CSV 文件
- javascript - 从 AWS S3 下载文件如何正确使用 JS
- plantuml - 注释中文本块的植物背景颜色
- python-3.x - 问:在 Python 中将字符串写入 HID 设备?