Когда звонить супер (..), а когда нет? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть простой вопрос относительно стиля программирования / соглашения в python, когда дело доходит до суперклассов, и вызова их методов.

Допустим, у меня есть

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

а у меня есть другой класс, класс В. Лучше ли делать: -

class B(A):
  pass

против

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

В конце концов я хочу сделать: b = B(); b.a() Есть ли разница между ними, кроме читабельности?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы используете super, когда переопределяющий метод должен сделать что-то в дополнение к тому, что делает метод его базового класса.

Например, если у вас есть class Point и class Circle(Point) и вы хотите реализовать def move, круги могут просто повторно использовать метод точки, который они наследуют - поскольку перемещение круга точно перемещает центральную точку круга.

Но если у вас есть class Monster и class Dragon(Monster) ... вы можете выжечь землю, когда мимо проходит дракон, что другие монстры не сделали бы. Таким образом, вы бы сказали, что движение дракона такое же, как и нормальное, с добавлением огня:

class Dragon(Monster):
    def move(self, destination):
        super(Monster, self).move(destination)
        destination.add_some_fire()
0 голосов
/ 30 августа 2018

Если вы не изменяете и не расширяете функциональность родительского метода, то нет смысла даже определять его, не говоря уже о его переопределении. Если вы не определите его, будет использован родительский метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...