Как обратиться из родительского класса к static-функции дочернего? Такая у меня возникла задача:
Есть абстрактный классclass BaseClass:
@staticmethod
def get_prefix():
raise Exception('Переопределите этот метод в дочернем классе')
@staticmethod
def get_string_with_prefix(string=''):
return BaseClass.get_prefix() + string
А вот дочерний класс. В нем я не хочу дублировать логику функции get_string_with_prefix, а хочу лишь переопределить функцию get_prefix, чтобы она возвращала строку, соответствующую моему классу.class ChildClass(BaseClass):
@staticmethod
def get_prefix():
return 'child_class_prefix_'
Так например, если я вызову ChildClass.get_string_with_prefix('test'), то, разумеется, вызывается get_prefix у BaseClass'а.
Как мне решить эту задачу?

21 Авг 2019 в 07:08
305 +1
0
Ответы
1

Для того чтобы обратиться из родительского класса к static-функции дочернего класса, можно воспользоваться методом класса. Вот как можно модифицировать ваш код:

class BaseClass:
@classmethod
def get_prefix(cls):
raise Exception('Переопределите этот метод в дочернем классе')
@classmethod
def get_string_with_prefix(cls, string=''):
return cls.get_prefix() + string
class ChildClass(BaseClass):
@staticmethod
def get_prefix():
return 'child_class_prefix_'
print(ChildClass.get_string_with_prefix('test')) # Вывод: child_class_prefix_test

В этом случае метод get_prefix объявлен как метод класса (@classmethod), а не как @staticmethod. Это позволяет обращаться к методу класса из метода другого класса через параметр cls. Таким образом, при вызове ChildClass.get_string_with_prefix('test') будет использован метод get_prefix дочернего класса ChildClass.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 436 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир