【问题标题】:When to call super(..) and when not to?何时调用 super(..) 何时不调用?
【发布时间】:2019-02-05 04:55:33
【问题描述】:

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

假设我有

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

我还有一个班,B班。这样做更好吗:-

class B(A):
  pass

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

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

【问题讨论】:

标签: python inheritance polymorphism


【解决方案1】:

当一个覆盖方法应该做一些事情除了它的基类的方法正在做的事情时,你使用super

例如,如果您有class Pointclass Circle(Point) 并且想要实现def move,则圆可以重用它们继承的point 方法 - 因为移动圆就是移动圆的中心点。

但是如果你有class Monsterclass Dragon(Monster)...你可能想在一条龙经过时烧焦土地,这是其他怪物不会做的。所以你会说龙的移动和普通的移动一样,只是加了一些火:

class Dragon(Monster):
    def move(self, destination):
        super(Monster, self).move(destination)
        destination.add_some_fire()

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 2022-11-25
      • 2016-02-11
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      相关资源
      最近更新 更多