重构long dict属性行

时间:2018-02-26 14:32:27

标签: python refactoring

代码工作正常,但似乎这条线很难看。

self.data["data"]["someComponent"]["items"][1]["content"]["items"].append(json.load(someVariable))

所以我的问题是: 是否适合python约定的代码? flake8,pylint等..没有出现问题。 也许你有一些重构的新想法?

1 个答案:

答案 0 :(得分:3)

对于小型程序或原型来说很好,但对于大型复杂的项目来说这是不好的。

如果是长行,您可以使用\移动到下一行(但是flake8会在[之前发出有关空格的警告):

self.data \
    ["data"] \
    ["someComponent"] \
    ["items"] \
    [1] \
    ["content"] \
    ["items"].append(json.load(someVariable))

在严肃的项目中,您应该使用其他数据结构。例如,不同类的对象的组合,形成您需要的树。

为词典结构中的每个实体创建一个类。例如,Data类,其中包含字段someComponent,例如someOtherComponent。创建类Component,其中包含字段items作为列表或使Component可迭代(定义方法__iter__()和可选方法__getitem__(index))。等等。并访问它的字段:

self.data.someComponent[1].content.append(myNewContentElement)

要从json获取myNewContentElement,您可以创建函数,该函数接受加载的JSON结构并为您返回ContentElement对象。