Pylint说:W0233:来自非直接基类'Nested'的__init__方法被称为(non-parent-init-被调用)

问题描述 投票:0回答:1

我也是编程和python的新手。当我尝试将我的数据结构包装到类中以便不进行listdict迭代时,出现了pylint错误消息:

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

是否有最佳的“ pythonic”方法来做到这一点?

我的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"
        }
    ]
}

并且当我将此数据(或其片段)加载到dictlist变量并尝试用此类包装时:

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)

Pylint不喜欢我的最后一行😳

python class pylint
1个回答
1
投票

显式地调用__init__没错,但是它是odd,而这就是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)
© www.soinside.com 2019 - 2024. All rights reserved.