【发布时间】:2021-09-15 21:45:00
【问题描述】:
抱歉,如果这是一个愚蠢的问题,但我无法通过搜索找到它。我有以下 Python 代码:
class CustomListView(ListView):
def dispatch(self, request : HttpRequest, *args, **kwargs):
# ... long blurb doing something with request and super, e.g.
return super().dispatch(request, *args, **kwargs)
class CustomDetailView(DetailView):
def dispatch(self, request : HttpRequest, *args, **kwargs):
# ... long blurb doing something with request and super, e.g.
return super().dispatch(request, *args, **kwargs)
(这是在 Django 的上下文中,但我认为这无关紧要。)
这两个dispatch函数完全一样,所以我觉得这是公然违反DRY原则。但问题是因为使用了super(),假设super 被调用了很多次,我不知道如何只编写一次这个函数并解决继承问题。
解决这个问题的最佳方法是什么?
【问题讨论】:
-
这个other SO post 包含关于mixin 的深入讨论。
-
这并不像看起来那么简单。 编译器 根据调用位置确定将哪些参数传递给
super。您可能需要注意基类出现的顺序,以确保调用正确的dispatch方法。 -
另外,如果同一继承层次结构中的两个类想要使用如下所示的
dispatch方法,那么mixin 将无法工作。将此方法放入 mixin 和直接放入CustomListView或CustomDetailView之间有很多区别。我会避免为此使用 mixin。
标签: python inheritance multiple-inheritance