代码之家  ›  专栏  ›  技术社区  ›  Sabutobi

长dict属性行的重构

  •  2
  • Sabutobi  · 技术社区  · 7 年前

    代码运行良好,但这行代码看起来很难看。

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

    所以我的问题是: 这是否适用于python约定的代码?薄片8、pylint等。。没有显示问题。 也许你对重构有一些新的想法?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Nikolay Lebedev    7 年前

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

    如果是长线,您可以使用 \ 移动到下一行(但flake8将在 [ ):

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

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

    为字典结构中的每个实体创建一个类。例如 Data 类,其中包含字段 someComponent 例如, someOtherComponent . 创建类 Component ,其中包含字段 items 作为列表或品牌 组成部分 iterable(定义方法 __iter__() 和可选方法 __getitem__(index) ). 等等以及访问其字段的方式:

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

    得到 myNewContentElement 从json可以创建函数,该函数采用加载的json结构并返回 ContentElement 对象。