Python: как правильно переназначить атрибуты для работы с функциями родительского класса - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь создать родительский класс и дочерний класс в Python. Я создал функции getter внутри родителя, которые вызывают атрибуты родителя, используя self. При создании дочернего элемента я не хочу переопределять функцию, просто переназначаю значение. Когда я делаю это и вызываю метод получения от ребенка, я все равно получаю значение атрибута родителя. Как заставить код использовать атрибут потомка без необходимости переопределять функцию получения?

Мои определения классов следующие:

class Dad:
    def __init__(self):
        self.likes = "Baseball"
        self.name = "John"

    def get_likes(self):
        print(self.likes)

    def get_name(self):
        print(self.name)

    def works(self):
        print("Programmer")


class Son(Dad):
    def __init__(self):
        self.likes = "Soccer"
        super().__init__()

    def works(self):
        print("Student")

При попытке запустить код,

d = Dad()
s = Son()
d.get_name()
d.get_likes()
d.works()
s.get_name()
s.get_likes()
s.works()

вывод выглядит так:

John
Baseball
Programmer
John
Baseball
Student

Мой желаемый результат будет:

John
Baseball
Programmer
John
Soccer
Student

1 Ответ

1 голос
/ 04 июля 2019

Вам просто нужно установить атрибуты Son для перезаписи атрибутов родительского класса:

class Son(Dad):
    def __init__(self):
        super().__init__()
        self.likes = "Soccer"

Это канонический способ реализации дочернего приоритета.

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