cari

Rumah  >  Soal Jawab  >  teks badan

python2.7 - Bagaimana untuk membuat kelas tidak tetap menggunakan Python?

Baru kepada ular sawa, saya tidak dapat mencari apa yang ingin saya cari. Contohnya, baca data daripada fail konfigurasi json, kemudian buat objek kelas berdasarkan data, dan kemudian panggil kaedah objek ini. Data fail konfigurasi json ini boleh ditetapkan secara bebas. Mungkin terdapat satu set data yang sepadan dengan objek kelas. Mungkin juga terdapat tiga set data yang sepadan dengan tiga kelas objek.
Bagaimana untuk menulis kod untuk membaca data json ini dan mencipta objek kelas?
Contohnya
objek sasaran kelas(objek):

def __init__(attr1,attr2):

def func1(self):
...

Dan data json kami ialah... "object1":{"attr1":"dawdad","attr2":"dwagfreg"},"object2":{"attr1":"45324523","attr2 ":"45634 "},

Bagi data sebenar, ia mungkin tidak dipanggil object1 object2, ia mungkin nama lain. Dan selepas saya membaca fail json ini, saya ingin mencipta objek kelas dan menetapkannya kepada data dalam json

世界只因有你世界只因有你2747 hari yang lalu852

membalas semua(4)saya akan balas

  • 扔个三星炸死你

    扔个三星炸死你2017-06-12 09:24:44

    Poster mahu mencipta objek secara dinamik. Boleh dibuat dengan 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)

    output dawdad

    Anda juga boleh menggunakan jenis untuk mencipta

    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)

    balas
    0
  • 滿天的星座

    滿天的星座2017-06-12 09:24:44

    Apabila mencipta kelas dalam Python, tidak perlu menyediakan semua ahli (iaitu, semua objek Python tidak tetap)

    cth.

    class A:
        pass
    a.b = 1             # 可以通过
    a.__dict__['c'] = 2 # 使用__dict__获取数据成员
    print(a.b) # 1
    print(a.c) # 2

    Jadi cuma baca Json dan tambahkan ahli data yang sepadan dalam Json pada sebarang objek

    balas
    0
  • 为情所困

    为情所困2017-06-12 09:24:44

    Nampaknya poster itu mahukan struktur seperti ini:

    # 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
    
    
    

    Jika ia adalah fail konfigurasi, disyorkan untuk menggunakan toml (https://github.com/toml-lang/...
    Pasang python toml dan anda boleh menggunakannya.

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-12 09:24:44

    Malah, saya rasa anda patut menyemak sama ada json数据,变成可以操作的对象, 就类似字典那样..看下json perpustakaan dalam fail memenuhi keperluan:

    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'}
     

    balas
    0
  • Batalbalas