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