Python & Классы - Могу ли я использовать метод в суперклассе, который будет создан в подклассе? - PullRequest
0 голосов
/ 22 апреля 2020

надеюсь, что у тебя все хорошо. Мне нужно сделать домашнюю работу, у меня возникло сомнение, что я не знаю, можно ли решить ее таким способом. Ты не против, если сможешь мне помочь? В любом случае, спасибо.

Предположим, у нас есть это:

class human:
    def dress(self, weather):
        return color(weather)

class girl(human):
    def color(self, weather):
        if weather == 'rainy':
            print('red')
        else:
            print('blue')

Могу ли я сделать это? Потому что на первый взгляд у меня проблема в том, что color () у Human не определено (логически). Вы можете спросить, почему вы так думаете? Потому что есть инструкции по решению проблемы. Что лучше решить?

Еще раз спасибо!

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Да, вы можете сделать это. Нередко существуют методы в суперклассах, которые оставляются для определения подклассами. Обычно суперкласс будет иметь реализацию-заполнитель, которая выдает исключение, указывающее, что подкласс должен его определить - однако это не требуется для работы.

class human:
    def dress(self, weather):
        return self.color(weather)

    def color(self, weather):
        raise NotImplementedError("Subclass needs to define this.")

class girl(human):
    def color(self, weather):
        if weather == 'rainy':
            c = 'red'
        else:
            c = 'blue'
        print(c)
        return c

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

Например, скажем, у нас есть экземпляр girl. И мы хотим, чтобы она одевалась по погоде. Хотя подкласс не определяет dress(), у него все еще есть этот метод, потому что он унаследовал его.

>>> mary = girl()
>>>
>>> mary.dress("rainy")
red

Во время выполнения интерпретатор запускает код для dress() и видит color(). Затем он ищет эту функцию на girl и находит ее. Не имеет значения, определяет это базовый класс или нет.

0 голосов
/ 22 апреля 2020

Нет, вы не можете вызывать метод дочернего класса из родительского класса, если методы не имеют одинакового имени. Это можно сделать, если вы создадите тот же метод "color" в родительском классе.

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