Как вызвать функцию родительского класса со своими собственными переменными экземпляра, не переопределяя дочерние экземпляры? - PullRequest
1 голос
/ 28 февраля 2020

Предположим, у меня есть следующий фрагмент кода.

class Parent(): 
    def __init__(self):
        self.where = 'parent'

    def show(self): 
        print("Inside Parent", self.where) 

class Child(Parent): 
    def __init__(self):
        self.where = 'child'
        super(Child, self).show()
        self.show()

     def show(self): 
        print("Inside Child", self.where) 

# Driver's code 
obj = Child()  

Но вывод

Inside Parent, child
Inside Child, child

Я хотел, чтобы вывод точно был (чтобы родитель был напечатан первым)

Inside Parent, parent
Inside Child, child

Как мне этого добиться? По сути, это вызов родительского класса в дочернем классе, где родительский класс должен использовать свою собственную переменную экземпляра.

Ответы [ 3 ]

1 голос
/ 29 февраля 2020

Благодаря @jasonharper это было довольно просто. Задача состояла в том, чтобы приватизировать where как __where переменные в каждом из родительского и дочернего классов.

class Parent(): 
    def __init__(self):
        self.__where = 'parent'

    def show(self): 
        print("Inside Parent", self.__where) 

class Child(Parent): 
    def __init__(self):
        self.__where = 'child'
        super().__init__()
        super().show()
        self.show()

    def show(self): 
        print("Inside Child", self.__where) 

# Driver's code 
obj = Child()  
1 голос
/ 28 февраля 2020

Вам нужно вызвать функцию __init__() родительского класса:

class Parent():
    def __init__(self):
        self.where = 'parent'

    def show(self):
        print("Inside Parent", self.where)

class Child(Parent):
    def __init__(self):
        self.where = 'child'
        self.show()
        super().__init__()
        super().show()

    def show(self):
        print("Inside Child", self.where)
0 голосов
/ 28 февраля 2020

Вы должны не забыть вызвать метод __init__() суперкласса.

Обратите внимание, вы пометили это как Python3, поэтому вы можете просто использовать

super().__init__()
super().show()

В этом случае не нужно использовать имя дочернего класса в скобках.

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