python2.7 - Comment créer des classes non fixes en utilisant Python ?
世界只因有你
世界只因有你 2017-06-12 09:22:44
0
4
850

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

世界只因有你
世界只因有你

répondre à tous(4)
扔个三星炸死你

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)
滿天的星座

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

为情所困

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.

伊谢尔伦

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'}
 
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal