【发布时间】:2017-09-20 14:14:25
【问题描述】:
我正在网上学习一个教程,代码是这样的:
class Hands(list):
def __init__(self, size=0, die_class=None, *args, **kwargs):
if not die_class:
raise ValueError("You must provide a die class")
super().__init__()
for _ in range(size):
self.append(die_class())
它基本上模拟了一个玩家有多个骰子 (size) 以及他们持有的骰子 (die_class)。
我的困惑是为什么我们需要打电话给super().__init__?我尝试在没有它的情况下运行代码,它运行良好!为什么需要调用?
【问题讨论】:
-
即使它现在可以工作,因为
list似乎不需要默认构造函数,如果下一个python 版本需要在list对象上调用__init__怎么办?为什么不打电话给__init__? -
没有必要(但这是一种很好的做法),请参阅softwareengineering.stackexchange.com/questions/318165/…
-
我认为它违反了 Liskov 原则。它可以工作,好的,但它什么时候会坏?