【问题标题】:How to autogenerate Getters from a json file in Pycharm如何从 Pycharm 中的 json 文件自动生成 Getter
【发布时间】:2016-07-16 18:39:52
【问题描述】:

我有非常大的config.json 文件,我正试图从pycharm IDE 中读取并生成getter。

样本config.json 看起来像这样(. . . 表示很多类似的项目):

{
  "key1" : "value1",
  "key2" : "value2",
  .
  .
  .
  "key1000" : value1000
}

我的 python ConfigRead.py 类看起来像这样:

import json


class ConfigRead(object):

    def __init__(self, file_path):
        json_content = open(file_path).read()
        self.jsonData = json.loads(json_content)

    def get_config(self):
        return self.jsonData

    def get_key1(self):
        return self.jsonData["key1"]

现在输入1000 getters 是我不想尝试的。

Eclipse 具有从配置文件自动生成的方法。我已迁移到PyCharm,但我无法弄清楚。

任何线索都会有所帮助 - 简化此过程。谢谢。

如果您在python 中认为这是一种不好的方法,我也愿意接受任何建议。如果我的设计能够简化并使事情更易于管理,我愿意改变我的设计。

【问题讨论】:

  • 这在任何编程语言中都是一种糟糕的方法。而不是key1keyN,为什么不使用列表(JSON 数组)呢?
  • 我今天没有更改 json 文件架构的控件。
  • 但是您可以更改它在代码中的表示方式。此外,吸气剂本身也不是 Python 的。
  • 你能帮我理解你建议的方法吗,请举个例子?这个config-reader 将用于启动flask-microservice

标签: python json python-2.7 pycharm getter


【解决方案1】:

您是否考虑过实施__getitem____getitem__ 是让您使用 [] 运算符的神奇方法,我认为这是一种更可持续的方法,因为它不需要您每次都更改源代码配置文件更改。我不知道您的具体用例是什么,但类似:

class ConfigRead(object):

  def __init__(self, file_path):
      json_content = open(file_path).read()
      self.jsonData = json.loads(json_content)

  def __getitem__(self, key):
      return self.jsonData[key]

会让你写这样的东西:

config = ConfigRead("path/to/file")
name = config['key1']

或者,如果您不想对配置数据进行任何额外的处理,您可以直接使用 JSON 数据,如下所示:

def read_config(file_path):
    with open(file_path) as config_file:
        return json.load(config_file)

config = read_config("path/to/file")
name = config['key1']

【讨论】:

  • 感谢@Tutleman,是的,这是我将要作为备份的东西。这种方法的问题是密钥没有抽象到代码中,这意味着如果服务开发人员使用它,他/她将可以输入一个不存在的密钥。为避免这种情况,我想采用上述方法。
  • @sudhishkr 你说的是消费者试图读取不存在的值吗?如果是这样,那就没什么可做的了——开发人员可以很容易地(取决于他们的 IDE,如果有的话)错误地输入了 getter 的名称。在这种情况下,将引发 AttributeError。在这种情况下,它会导致KeyError
  • 是的,你正确理解了我。我认为这是对我当前方法的一个不那么复杂且体面的改变。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
相关资源
最近更新 更多