Pet*_*mer 5 python google-app-engine
在其他答案中已经提到过def get(self),def post(self)为任何给定的请求获取相同的代码.我想知道人们使用什么技术,我在想:
class ListSubs(webapp.RequestHandler):
def get(self):
self._run()
def post(self):
self._run()
def _run(self):
self.response.out.write("This works nicely!")
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 11
我建议理论和实际的原因,为什么你使用的方法(将公共代码重构为一个单独的方法,并从post和get方法调用它)优于显然更简单的替代方案,只有这两个中的一个方法调用另一个.
从理论的角度来看,"方法A完全代表方法B"意味着"首要"或"不对称"的概念 - 一个设计决定,向前,任何可能适用于B的变化将不可避免地,本质上适用于A以及; A可能在未来稍微定制B(在A调用B之前和/或之后添加一些额外的代码)但反之亦然.当没有理由期望这样的首要地位时,在代码中嵌入这个概念是一个糟糕的编码决定.通过让A和B都调用公共私有方法C,可以避免破坏对称性.
有些人对理论论点不满意,更喜欢实用论证:幸运的是,在这种情况下,理论直接转化为实用的.同样,这是代码未来演变的一个问题:同时使用A和B调用C会让您完全自由地进行小型自定义(在调用C之前和/或之后添加代码),或者两者都有,或者两者都没有A和B.因为你不知道你需要这种灵活性的哪些部分,而且简单性方面的成本微乎其微,采用简单灵活的路线是非常实用和可取的.
最后一个实用点(适用于任一选择):任何时候你都有这样的模式:
def amethod(self):
return cmethod(self)
Run Code Online (Sandbox Code Playgroud)
你通常(谦虚地)更好地重写这个
amethod = cmethod
Run Code Online (Sandbox Code Playgroud)
这避免了不必要的调用嵌套级别(平坦优于嵌套).因此,您的类可以有用地编码:
class ListSubs(webapp.RequestHandler):
def _run(self):
self.response.out.write("This works even better!")
get = post = _run
Run Code Online (Sandbox Code Playgroud)
没什么大不了的,你就必须重构回原来的"嵌套"的方式,如果当你确实需要嵌套调用之前或之后申请调整(从get到_run,等等),或者需要在调试其他调整(例如设置您的调试器post中的断点,但没有断点触发器get等),但对于那些可行的时间,这是一个很好的简化.