-1

我有一个(CBV)超类(继承自 DjangoView和一个 mixin)和多个子类。

我需要在所有子类中实现完全相同的功能,但实际的父类将完全不同,除了将继承自 Django 的View.

所以实际上我需要通过以下方式获得相同的子类功能:

  1. 不同的 URL(或实际上不同的 URL前缀和相同的 URL 集)
  2. 不同的dispatch()方法(所有子类通用,但两组不同)

这样做最明智的方法是什么?

编辑:实际上,我想我可以通过简单的方式来解决这个问题

更改dispatch()以便它调用dispatchA()如果 URL 是/a/...并且dispatchB()如果 URL 是/b/.../

现在的问题是:__pattern(...)在 djangourlpatterns()中使用不同前缀两次是否可以。

对于额外的信用,任何想法如何添加一个 kwarg (如b = True)到后一种模式。

4

3 回答 3

1

我知道我会为此感到愤怒,假设是反模式,但我在这些情况下使用多重继承并将共享的“孩子”视为混合。

于 2013-04-10T07:00:50.293 回答
1

您可以使用委托模式来处理类的常见方面。

如果可以避免菱形继承模式,则 mixin 类也应该可以。

于 2013-04-10T07:02:48.383 回答
0

在这种情况下,我认为你不应该做一个子类。

当两个类具有“is-a”关系时,使用子类。例如,'square' 是一个'shape',所以'square' 可以是'shape' 的子类。

通过子类化,你通常希望子类继承超类的内部状态描述

如果你只是想重用一些函数,我建议你应该做一些重构,并将这些常用函数提取到一个辅助类中。

于 2013-04-10T08:31:44.207 回答