Django:__init__之前还是之后?

时间:2018-08-03 07:58:40

标签: django

我对super()有点困惑。 self.order = order应该在它之前还是之后?当我测试它时,它似乎都可以工作。我只是经常使用它,所以我认为这很好,我更好地理解了。

def __init__(self, order, *args, **kwargs):
    self.order = order  # BEFORE OR AFTER __init__?
    super().__init__(*args, **kwargs)

2 个答案:

答案 0 :(得分:2)

通常,我们希望子类的所有已定义行为都可以覆盖父类的行为,因此通常应先调用super().__init__(*args, **kwargs),然后再使用子代自己的版本覆盖父类的选择性实例变量。

但是,在某些情况下,您希望子类中的父类的__init__()具有不同的行为,可以通过先修改args和/或kwargs来做到这一点。调用父类的__init__()

因此,这实际上取决于您希望子类如何自定义父类。

答案 1 :(得分:0)

取决于类,但是在大多数情况下都没有关系。

我倾向于先super().__init__(*args, **kwargs),除非有理由不这样做(例如,在kwargs被修改之前修改它)。