什么时候打超级(..)而什么时候不打?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么时候打超级(..)而什么时候不打?相关的知识,希望对你有一定的参考价值。

关于超类和调用它们的方法,我对python中的编程风格/约定有一个简单的问题。

让我们假设我有

class A():
  def a(self):
    print "a"

我还有另一堂课,B班。做得更好: -

class B(A):
  pass

VS

class B(A):
  def a(self):
    super(B,self).a()

我最终想做:b = B(); b.a()除了可读性之外,两者有什么区别吗?

答案

当覆盖方法除了基类的方法之外还应该执行某些操作时,可以使用super

例如,如果你有class Pointclass Circle(Point)并且想要实现def move,圆圈可以只重用它们继承的点的方法 - 因为移动圆圈正好移动了圆的中心点。

但是如果你有class Monsterclass Dragon(Monster) ......你可能想要在龙走过时烧焦土地,其他怪物也不会这样做。所以你要说龙运动和正常运动一样,增加了一些火焰:

class Dragon(Monster):
    def move(self, destination):
        super(Monster, self).move(destination)
        destination.add_some_fire()
另一答案

如果您没有更改或扩展父方法的功能,那么就没有理由甚至定义它 - 更不用说覆盖它了。如果您没有定义它,那么将使用父方法。

以上是关于什么时候打超级(..)而什么时候不打?的主要内容,如果未能解决你的问题,请参考以下文章

1小时学会不打代码制作一个网页精美简历

Windows 7 更新程序 (KB974332) 系统提示 不适用您的计算机。

打印预览时只有一页,但是打印完之后会自动打多一张空白纸,要怎么设置,才能不打那张空白纸?

LOL为啥有很多人只打匹配,是因为不敢打排位吗?

什么时候会单独使用 findNavController 方法而不是 NavHostFragment?

醉生梦死——Day 4