python - 长字典属性行的重构

标签 python refactoring

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

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

所以我的问题是: 这适合Python约定的代码吗? flake8、pylint 等没有显示问题。 也许您对重构有一些新的想法?

最佳答案

这对于小型程序或原型(prototype)来说很好,但对于大型和复杂的项目来说却很糟糕。

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

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

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

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

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

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

关于python - 长字典属性行的重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48990825/

相关文章:

python - 查询以使用 mysql 调用与本地数据框中的列匹配的值

c# - ReSharper:重构以消除中间接口(interface)

c# - 如何重构此 C# 代码?

python - 在Python中现有的内置类方法中添加装饰器

python - Django REST框架: create and update an object with a nested object value (instead of Primary Key)

python - scikit-learn 包中的 CountVectorizer 问题

python - Celery/RabbitMQ unacked 消息阻塞队列?

java - 当公共(public)代码有多个不兼容的返回类型时分解公共(public)代码

cocoa - 如何重构调用 super 的代码中的口是心非

java - 将两种方法合并为一种