Динамически создавать классы - Python - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь выяснить, что было бы лучшим способом динамического создания классов на основе содержимого файла JSON.Например, вот фрагмент из файла JSON:

{
"stuff": [{
        "name": "burger",
        "aka": ["cheeseburger", "hamburger"]
    },
    {
        "name": "fries",
        "aka": ["french fries", "potatoes"]
    },
    {
        "name": "meal",
        "items": [{
                "name": "burger",
                "value": "<burger>"
            },
            {
                "name": "fries",
                "value": "<fries>"
            }
        ]
    }

  ]
}

А теперь на основе этого JSON я хочу классы, которые представляют эти объекты.Например, что-то вроде:

class Burger:
   def __init__(self):
   self.name = "burger"
   self.aka = ["cheeseburger", "hamburger"]

class Meal:
   def __init__(self):
   self.name = "meal"
   self.burger = Burger()
   self.fries = Fries()

Итак, на основе этого JSON я хочу создавать классы, которые представляют те же атрибуты и отношения, которые мы видим в JSON.Любые идеи о том, как лучше подойти к этому, будут оценены!

1 Ответ

2 голосов
/ 14 июня 2019

Предполагая, что json переменная содержит ваши данные json, попробуйте это:

for d in json:
    name = d.pop('name')
    t = type(name, (object,), d)

То, что она делает, это вызывает type, что создаст новый тип в python (точно так же, как если бы вы сделали class name, правильное имя которого соответствует содержимому переменной name, с базовым классом object и атрибутами в d. Переменная t будет содержать нужный объект класса.

...