Задать вопрос
@maksam07

Как правильно создать класс родитель для нескольких классов дочерей?

Добрый день. У меня есть 3 класса-дочери, каждый из которых может вызывать 3 одинаковых метода. В конструкторе классов идет заполнение словаря. Но когда я распечатываю словарь, я обнаруживаю, что в каждом классе содержатся данные из всех 3-х классов. Подскажите, как правильно создать классы, чтобы не нужно было 3 одинаковых метода прописывать в каждый?
Пример:
class CECommon:
    data = {}

    def get(self):
        return self.data

    def get_by_id(self, id, only_name=True):
        if id not in self.data:
            return False

        return self.data[id]['name'] if only_name else self.data[id]

    def search_by_name(self, name):
        return {k: val for k, val in self.data.items() if val['name'].lower().count(name.lower())}


class AAA(CECommon):
    def __init__(self, text):
        for row in text.splitlines():
            val = row.split(';')
            self.data[int(val[0])] = {
                'id': int(val[0]),
                'pos_id': int(val[1]),
                'name': val[2],
            }

        self.__data = dict(sorted(self.data.items(), key=lambda x: x[1]['name']))


class BBB(CECommon):
    def __init__(self, text):
        for row in text.splitlines():
            val = row.split(';')
            self.data[int(val[0])] = {
                'id': int(val[0]),
                'name': val[1],
            }

        self.__data = dict(sorted(self.data.items()))


class CCC(CECommon):
    def __init__(self, text):
        for row in text.splitlines():
            val = row.split(';')
            self.data[int(val[0])] = {
                'id': int(val[0]),
                'name': val[1],
            }

        self.__data = dict(sorted(self.data.items(), key=lambda x: x[1]['name']))


Если вызвать ССС.get() (конечно, после того как вызвали перед этим все 3 класса и заполнили данными) то получим словарь с данными всех (AAA, BBB, CCC) классов
  • Вопрос задан
  • 38 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@qid00000000
Мало что знаю, но информацию найду в гугле
Создай в CECommon __init__ и перенеси туда инициализацию data. В потомках в init вызывай super.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы