我正在Google App Engine中制作一个购物车应用。我有许多从基本处理程序派生的类:
class BaseHandler(webapp.RequestHandler):
def get(self, CSIN=None):
self.body(CSIN)
这是否意味着body()
每个后代类的方法都需要具有相同的参数?这很麻烦。实际上只有一个后代使用该参数。而当我添加新的参数时呢?我需要遍历每堂课吗?
class Detail(BaseHandler):
def body(self, CSIN):
class MainPage(BaseHandler):
def body(self, CSIN=None): #@UnusedVariable
class Cart(BaseHandler):
def body(self, CSIN): #@UnusedVariable
重写的方法原则上不必彼此具有相同的参数,但是它们必须具有与调用它们相同的形式参数。因此,由于任何处理程序都可以通过body
调用它get
,是的,它们必须相同。就此而言,重写的重点是调用者不知道对象的确切类,因此,如果它们都不具有相同的参数,通常调用者将不知道传递什么。因此,我认为使用不同参数进行覆盖将是不寻常的棘手问题。
如果更改了args,则使用yes,则必须更改要匹配的函数。这与继承无关,这就是Python函数的工作方式。
如果您想要更多的灵活性,可以使用关键字参数,这是将字典作为参数传递的一种不错的方式:
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
用作字典之间并没有太多实际的区别。
问题内容: 我有两个课,和。它们看起来像这样: 此错误指向Field的: 我希望首先调用Background init ()。要将“ a,b”传递给Fields的 init (),Field会分配a和b,然后将其中包含三个0的列表分配给field。然后让Background的 init ()继续,然后调用它自己的buildField()并用包含c的列表覆盖self.field。 似乎我还没有完全理
我正在编写一个带有对象的游戏,我想根据它的类使用不同的命令。我有一个超级类“项目”,一个子类“工具扩展项目”和“锤子扩展工具”。在项目超类(抽象)中,我有一个抽象方法“doCommand”,我在工具中覆盖了它。这很好用,我现在在工具中有一个有效的“doCommand”。但是当我想在 Hammer 中覆盖这个“doCommand”时,它只是使用工具的“doCommand”。 这来自调用方法的类的一部
Java代码: 我的问题是:类中的是否重载了超类中同名的? 我的朋友说他们不是因为他们不在一个班。
本文向大家介绍python中子类继承父类的__init__方法实例,包括了python中子类继承父类的__init__方法实例的使用技巧和注意事项,需要的朋友参考一下 前言 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。 注意:这个名称的开始和结尾都是
嘿,我正在尝试调用子类方法(ChildClass扩展了超类()) 它没有看到ChildClass方法,我只能调用SuperClass()中的方法,我知道这可能是一个愚蠢的问题,但无论如何干杯
本文向大家介绍String类可以被继承吗?相关面试题,主要包含被问及String类可以被继承吗?时的应答技巧和注意事项,需要的朋友参考一下 String类在声明时使用final关键字修饰,被final关键字修饰的类无法被继承。 接下来我们可以看一下String类的源代码片段: 为什么Java语言的开发者,把String类定义为final的呢? 因为只有当字符串是不可变的,字符串池才有可能实现。