Rumah > Soal Jawab > teks badan
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
扔个三星炸死你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)
滿天的星座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
为情所困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.
伊谢尔伦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'}