@Maxwell012

Как вызвать метод подкласса в родительском?

У меня есть родительский класс, в котором вызываются методы дочерних классов:
class Profile:
    async def profile(self, message: Message, state: FSMContext) -> None:
        await state.clear()
        profile_handler = SpecialistProfile() if self.is_specialist else UserProfile()
        await profile_handler.profile(message=message, state=state)

2 дочерних класса:
class SpecialistProfile(Profile):
    @staticmethod
    async def specialist_profile(message: Message, state: FSMContext) -> None:
         # code


class UserProfile(Profile):
    async def user_profile(self, message: Message, state: FSMContext) -> None:
         # code

Изначально specialist_profile и user_profile были статическими методами, но сейчас мне нужно передавать экзампляр класса в user_profile то есть self. Я конечно могу убрать наследование и создавать экзмепляры UserProfile() и SpecialistProfile() непосредственно в классе Profile, но в других частях кода я также использую классы юзер и специалист, и не хочется обращаться к этим классам через класс Profile и также не хочется создавать еще дополнительные классы. Буду рад за любые подсказки.
  • Вопрос задан
  • 213 просмотров
Решения вопроса 2
@Everything_is_bad
У меня есть родительский класс, в котором вызываются методы дочерних классов:
Когда родитель должен знать что-то про потомков это ошибка в проектирование, зачем вообще тогда тебе такое наследование? Рекомендую полностью переделать, то что ты натворил.
Ответ написан
Ваша ошибка - пытаться сделать что-то не по шаблону: не придумывайте задачу, лучше хорошо изучите и проработайте готовые примеры из документации или книги и запомните их - это вам поможет, но на это уйдет много времени. В данный момент вы тратите время впустую, т.к. ваш подход некорректен.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 250 000 ₽
Rinkel Москва
от 50 000 до 100 000 ₽
Wanted. Лимассол
До 6 000 €