Пилинт говорит: W0233: метод __init__ из непрямого базового класса 'Nested' вызван (вызван non-parent-init) - PullRequest
1 голос
/ 25 января 2020

Я новичок ie в программировании и python также. Когда я пытаюсь обернуть свою структуру данных в класс, чтобы не выполнять итерации list или dict, я получаю сообщение об ошибке pylint:

W0233: __init__ method from a non direct base class 'Nested' is called (non-parent-init-called)

Есть ли лучший "pythoni c" способ сделать это?

Мои json данные таковы:

{
    "template"  :   [
        {
            "folder"    :   "/Users/SA/Documents/GIT/rs-finance/templates",
            "basetpl"   :   "tpl.docx",
            "header"    :   "header_tpl.docx",
            "table"     :   "table_tpl.docx", 
            "footer"    :   "footer_tpl.docx"
        }
    ],
    "export"    :   [
        {
            "folder"    :   "/Users/SA/Documents/GIT/rs-finance/export",
            "name"      :   "result.docx"
        }
    ]
}

И когда я загружаю эти данные (или их часть) в dict или list переменную & try чтобы обернуть его этим классом:

class Nested ():
    def __init__(self, data):
        if isinstance (data, dict):
            for key, value in data.items():
                if isinstance(value, (float, int, str)):
                    setattr(self, key, value)
                else:
                    setattr(self, key, Nested(value))
        if isinstance(data, list):
            for item in data:
                self.__init__(item)

Пилинту не нравится моя последняя строка ?

1 Ответ

3 голосов
/ 25 января 2020

Вызов __init__ явно не ошибается, но это нечетно , и это все, что Pylint предупреждает о вас.

Лучшей практикой является написать отдельную рекурсивную функцию, которая делает то, что вы хотите, а затем вызвать это из __init__.

class Nested:
    def __init__(self, data):
        self.recursive(data)

    def recursive(self, data):
        if isinstance(data, dict):
            for key, value in data.items():
                if isinstance(value, (float, int, str)):
                    setattr(self, key, value)
                else:
                    setattr(self, key, Nested(value))
        elif isinstance(data, list):
            for item in data:
                self.recursive(item)
...