class A():
def foo(self):
return "foo A"
def foo1(self):
return self.foo()
class B(A):
b = 0
def foo(self):
self.b = 1
return "foo B"
def foo1(self):
super(B, self).foo1()
return True
类B
调用foo1
,这将调用类A
的{{1}},后者调用类foo1
的{{1}},不是单向覆盖,这样做的利弊是什么?还是一个好习惯,这里潜在的问题是什么?
答案 0 :(得分:0)
使用此模式是非常好的做法,并且很常见。
例如,我可以提到Django
框架,因为我对此很熟悉。在该框架中,您可以对内置类进行子类化(例如,用于处理HTTP POST数据的通用UpdateForm
)。
例如,UpdateView
在其所有基类的某个位置具有以下两种方法(请注意一种方法如何调用另一种方法):
class UpdateView(...):
def get_form_class(self):
return self.form_class
def get_form(self, form_class=None):
if form_class is None:
form_class = self.get_form_class()
return form_class(**self.get_form_kwargs())
我可以创建自己的视图,从此内置视图中继承子类,并仅覆盖这些方法之一,而另一个则保持其原始功能。
from django.views.generic import UpdateView
from .forms import MyCustomFormClass
class MyUpdateView(UpdateView):
def get_form_class(self):
return MyCustomFormClass
这是一种非常常见的模式,它允许自定义,同时还避免了很多代码重复。
这能回答您的部分问题吗?