python2.7 - Bagaimana untuk membuat kelas tidak tetap menggunakan Python?
世界只因有你
世界只因有你 2017-06-12 09:22:44
0
4
851

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

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

membalas semua(4)
扔个三星炸死你

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

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

为情所困

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.

伊谢尔伦

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'}
 
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan