Как обратиться из родительского класса к 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
474 +2
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 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир