@vilaugra

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

Сразу скажу, что мне очень это надо, и не важно, что оно противоречит концепции ООП.

Есть два класса: Родительский и Дочерний. В дочернем классе мы определяем различные переменные (сколько угодно). А в родительском классе мне нужно как-то получить список этих объявленных переменных, но как - я не знаю. Может как-то через __init__ или __new__ можно?

Вариант добавить в дочернем классе какие-то функции не нужен. Мне надо именно в родительском классе получить эти переменные. Зачем? Потому что родительский класс - он будет один, а дочерних много. И я не буду в каждом из них повторять одни и те же дополнительные функции.

Или может есть какая-то другая идея реализации? Если мягко сказать, мне нужно, чтобы родительский класс собирал информацию о переменных из дочерних классов - их название и значение (эти переменные вообще являются экземпляроми других классов).
class Parent:
    def __new__(...):
        ...
    def __init__(...):
        ...

class Child(Parent):
    first = 1
    second = 2
    third = 3
    ...
  • Вопрос задан
  • 156 просмотров
Пригласить эксперта
Ответы на вопрос 1
ArsenyMatytsyn
@ArsenyMatytsyn
Руководитель frontend направления, предприниматель
Как указали в комментариях это противоречит концепции, к слову не только ООП. Родительский класс ничего не знает про дочерний в отличие от последнего.

Вот в последнем ты и можешь оформить подобные обращения и оперировать уже на его уровне. Соответственно, родительский класс не умеет и не должен делать того, чего умеет делать дочерний (за вычетом родительского), а вот дочерний уже сочетает и то и то.

Такой подход, однонаправленного потока данных приводит к безопасности в первую очередь. И кроме того, имея на руках конечный дочерний класс какой вообще смысл пытаться что-либо впихнуть в родительский? Если есть какая-то логика обработки, которая содержит в себе данные дочернего, то эта логика и должна быть описана в дочернем, в не родительском.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы