gpt4 book ai didi

Python:子类可以重载继承的方法吗?

转载 作者:太空狗 更新时间:2023-10-30 02:00:41 25 4
gpt4 key购买 nike

我正在 Google App Engine 中制作购物车应用程序。我有许多派生自基本处理程序的类:

class BaseHandler(webapp.RequestHandler):
def get(self, CSIN=None):
self.body(CSIN)

这是否意味着每个后代类的body() 方法都需要有相同的参数?这很麻烦。实际上只有一个后代使用该论点。当我添加新的参数时呢?我是否需要遍历和更改每门类(class)?

class Detail(BaseHandler):
def body(self, CSIN):

class MainPage(BaseHandler):
def body(self, CSIN=None): #@UnusedVariable

class Cart(BaseHandler):
def body(self, CSIN): #@UnusedVariable

最佳答案

重写的方法原则上不必具有彼此相同的参数,但它们必须具有相同的调用时使用的形式参数。因此,由于任何处理程序都可以通过 get 在其上调用 body,所以它们必须相同。就此而言,重写的一点是调用者不知道对象的确切类,因此如果它们不都具有相同的参数,通常调用者不知道要传递什么。因此,我认为使用不同参数进行覆盖会是一种不寻常的诡计。

如果您更改调用它的参数,那么是的,您必须更改函数以匹配。这与继承无关,而是 Python 函数的工作方式。

如果你想要更多的灵 active ,你可以使用关键字参数,这是一种将字典作为参数传递的奇特方式:

class Detail(BaseHandler):
def body(self, **kwargs):
print kwargs['CSIN']

class MainPage(BaseHandler):
def body(self, **kwargs): # can ignore kwargs

class Cart(BaseHandler):
def body(self, **kwargs): # can ignore kwargs

class BaseHandler(webapp.RequestHandler):
def get(self, CSIN=None):
self.body(CSIN = CSIN, some_new_arg = 3)

class SomeNewHandler(BaseHandler):
def body(self, **kwargs):
print kwargs['some_new_arg']

不过,我确实有点质疑这样做是否明智:如果你要添加很多新参数,并且大多数实现忽略了大多数参数,那么 body 可能不是一个真正的函数这些论点。也许实际上参数是处理程序对象状态的一部分,您恰好将其作为参数传递。显然,差异有些主观 - 对于每个对象只调用一次的函数,传递字典和使用 self 作为字典之间并没有太多实际差异。

关于Python:子类可以重载继承的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2398666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com