Переопределенные методы Python, вызываемые из суперкласса - PullRequest
0 голосов
/ 20 октября 2019

Существует много информации о искажениях и их использовании, однако я пытаюсь понять следующий фрагмент кода:

class Parent:

    NAME = 'PARENT'

    def __init__(self):
      self.print_me()

    def print_me(self):
      print(f"Parent class {self.NAME}")


class Child(Parent):

    NAME = 'CHILD'

    def __init__(self):
      super().__init__()

    def print_me(self):
      print(f"Child class {self.NAME}")


c = Child()

Может кто-нибудь объяснить, как вызывается переопределенный метод (print_me) изродительский класс init и не печатает родительский класс PARENT? Если я использую mangling для NAME и print_me, метод не переопределяется, и поэтому он вызывается из ожидаемого родительского элемента.

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

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

c = Parent()
0 голосов
/ 20 октября 2019

Здесь объект (c) является объектом дочернего класса. В дочернем классе конструктор вызывает родительский класс, а конструктор родительского класса вызывает метод print_me. Здесь вы вызываете дочерний объект, чтобы он выполнял дочерний метод. Если метод print_me недоступен в child, тогда он выполнит родительский метод

...