recherche

Maison  >  Questions et réponses  >  le corps du texte

python2.7 - Comment créer des classes non fixes en utilisant Python ?

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

世界只因有你世界只因有你2713 Il y a quelques jours819

répondre à tous(4)je répondrai

  • 扔个三星炸死你

    扔个三星炸死你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)

    répondre
    0
  • 滿天的星座

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

    répondre
    0
  • 为情所困

    为情所困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.

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦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'}
     

    répondre
    0
  • Annulerrépondre