Maison > Questions et réponses > le corps du texte
Nouveau sur Python, je ne trouve pas ce que je veux rechercher. Par exemple, lisez les données d'un fichier de configuration json, puis créez des objets de classe basés sur les données, puis appelez les méthodes de ces objets. Les données de ce fichier de configuration json peuvent être définies librement. Il peut exister un ensemble de données correspondant à un objet d'une classe. Il peut également y avoir trois ensembles de données correspondant à trois classes d'objets.
Comment écrire du code pour lire ces données json et créer un objet de la classe ?
Par exemple
Class targetobject(object):
def __init__(attr1,attr2):
def func1(self):
...
Et nos données json sont... "object1":{"attr1":"dawdad","attr2":"dwagfreg"},"object2":{"attr1":"45324523","attr2 ":"45634 "},
Quant aux données réelles, elles ne peuvent pas s'appeler objet1 objet2, elles peuvent être un autre nom. Et après avoir lu ce fichier json, je veux créer un objet de la classe et l'attribuer aux données en json
扔个三星炸死你2017-06-12 09:24:44
L'affiche veut créer des objets de manière dynamique. Peut être créé avec exec
a = {"object1": {"attr1": "dawdad", "attr2": "dwagfreg"}, "object2": {"attr1": "45324523", "attr2": "45634"}}
for obj_name in a:
exec ('class %s(object):pass' % (obj_name))
for attr in a[obj_name]:
exec ('%s.%s="%s"' % (obj_name, attr, a[obj_name][attr]))
print(object1.attr1)
sortie papa
Vous pouvez également utiliser le type pour créer
class targetobject(object):
def __init__(self, attr1, attr2):
self.attr1 = attr1
def func1(self):
pass
if __name__ == '__main__':
a = {"object1": {"attr1": "dawdad", "attr2": "dwagfreg"}, "object2": {"attr1": "45324523", "attr2": "45634"}}
for obj_name in a:
obj = type(str(obj_name), (targetobject,), a[obj_name])
print(obj)
print(obj.attr1)
滿天的星座2017-06-12 09:24:44
Lors de la création d'une classe en Python, il n'est pas nécessaire de fournir tous les membres (c'est-à-dire que tous les objets Python ne sont pas fixes)
par exemple.
class A:
pass
a.b = 1 # 可以通过
a.__dict__['c'] = 2 # 使用__dict__获取数据成员
print(a.b) # 1
print(a.c) # 2
Alors lisez simplement Json et ajoutez les données membres correspondantes dans Json à n'importe quel objet
为情所困2017-06-12 09:24:44
On dirait que l'affiche souhaite ce genre de structure :
# coding: utf-8
from collections import namedtuple
obj = {"object1":{"attr1":"dawdad","attr2":"dwagfreg"}, "object2":{"attr1":"45324523","attr2":"45634"}}
obj_insts = []
for obj_name in obj:
obj_attr = obj[obj_name]
attrs = obj_attr.keys()
attr_values = obj_attr.values()
Obj = namedtuple(obj_name, attrs)
obj_insts.append(Obj(*attr_values))
print(obj_insts)
print(ibj_insts[0].attr1)
[object1(attr2='dwagfreg', attr1='dawdad'), object2(attr2='45634', attr1='45324523')]
dawdad
S'il s'agit d'un fichier de configuration, il est recommandé d'utiliser toml (https://github.com/toml-lang/...
Installez python toml et vous pourrez l'utiliser.
伊谢尔伦2017-06-12 09:24:44
En fait, je pense que vous devriez vérifier si la json
数据,变成可以操作的对象, 就类似字典
那样..看下json
bibliothèque dans le fichier répond aux exigences :
cat 1.txt:
{"object1":{"attr1":"dawdad","attr2":"dwagfreg"},"object2":"attr1":"45324523","attr2":"45634"}}
# python交互shell
>>> import json
>>> a = json.load(open('1.txt'))
>>> a
{u'object1': {u'attr2': u'dwagfreg', u'attr1': u'dawdad'}, u'object2': {u'attr2': u'45634', u'attr1': u'45324523'}}
>>> a['object1']
{u'attr2': u'dwagfreg', u'attr1': u'dawdad'}