Heim > Artikel > Backend-Entwicklung > Python implementiert Objekte, die JSON-Speicherung und -Analyse unterstützen
Wir wissen, dass das JSON-Modul zum bequemen dauerhaften Speichern von Python-Grundtypdaten (Dikt, Liste usw.) in Dateien verwendet werden kann und dass es auch durch benutzerdefinierte Konvertierungsfunktionen konvertiert werden kann und Erben Sie die Methode JSON encode&decode, um die Speicherung benutzerdefinierter Klassen zu implementieren. Dieser Artikel basiert auf dem vorherigen „Python JSON-Modul“, um das Objekt von Python zu implementieren, das JSON-Speicher unterstützt.
Es ist sehr sinnvoll, dass Objekte JSON speichern und analysieren können. Beispielsweise fallen beim Training aller Klassifizierungsalgorithmen beim maschinellen Lernen große Datenmengen an. Wenn der Klassifizierungsalgorithmus bei jedem Start der Klassifizierung neu trainiert werden muss, ist dies eine Verschwendung von Ressourcen und eine ineffiziente Klassifizierung Das durch das Training generierte Algorithmusobjekt kann gespeichert werden. Sofern es nicht benötigt wird, muss die Algorithmusoptimierung nur später geladen werden. Andererseits ermöglicht die Fähigkeit von Objekten, JSON zu analysieren und zu speichern, auch deren Übertragung über das Netzwerk, was im aktuellen Cloud Computing und der verteilten Datenverarbeitung von großer Bedeutung ist.
Um Self-Storage und Parsing zu realisieren, sind die wichtigsten Vorgänge beim Definieren eines Objekts:
0, Objekt_json.py kopieren zum Paket. Das Modul, das das Objekt definiert, importiert object_json: import object_json.
1. Die Funktion init() muss eine variable Anzahl von Funktionsaufrufen unterstützen, d. h. sie muss als init(self, …, , **args) geschrieben werden. Nur wenn das Objekt auf diese Weise definiert wird, kann es andere Eigenschaften als dieEigenschaften haben, die während der Konstruktionsphase initialisiert werden müssen.
2. Für Attribute, die während der Objektkonstruktionsphase initialisiert werden müssen, müssen die formalen Parameter in der Funktion init() genau mit den Namen dieser Attribute übereinstimmen, damit sie über das Wörterbuch erstellt werden können '3. Definieren Sie ein Attribut „Name“ – den Namen der Objektinstanz, implementiert mit dem Inspect-Modul. Das Attribut „Name“ wird hauptsächlich zum Generieren des Standarddateinamens beim Speichern von Objekten verwendet. 4, definieren Sie die Methoden jsonDumps() und jsonLoadTransfer(), schließen Sie das Laden der Objekt-JSON-Datei und die Erstellung neuer Objekte über objectLoadFromFile() ab.
(i) jsonDumps() wird zum Konvertieren von Objekten in Diktate und zum Speichern von Objekten in JSON-Dateien über json.dumps() verwendet. Wenn der Benutzer keinen Dateinamen angibt, ist Instanzname.json der Standardspeicher Datei. Da JSON nur Python-Basistypen unterstützt, müssen andere Typen im Objekt (z. B. Numpy-Matrix) in Python-Basistypen konvertiert werden (z. B. Matrix.tolist (), um eine Matrix in eine Liste umzuwandeln). (ii) jsonLoadTransfer() wird verwendet, um die Konvertierung des Datenformats abzuschließen und einige Objektattribute von Basistypen in erforderliche Typen zu konvertieren (z. B. mat(list), um den Typ von Liste in Matrix If zu konvertieren). Bei Objekten können nur Python-Basistypen diese Methode weglassen. Der Prozess zum Erstellen eines vollständigen und verwendbaren Objekts ist:obj = objectLoadFromFile() obj.jsonLoadTransfer()Der folgende Code ist der Quellcode des object_json-Moduls, das benutzerdefinierte Objekte für die JSON-Speicherung und -Analyse unterstützt.
import json import inspect import pdb def object2dict(obj): #convert object to a dict d = {'class':obj.class.name, 'module':obj.module} d.update(obj.dict) return d def objectDumps2File(obj, jsonfile): objDict = object2dict(obj) with open(jsonfile, 'w') as f: f.write(json.dumps(objDict)) def dict2object(d): '''convert dict to object, the dict will be changed''' if'class' in d: class_name = d.pop('class') module_name = d.pop('module') module = import(module_name) #print 'the module is:', module class_ = getattr(module,class_name) args = dict((key.encode('ascii'), value) for key, value in d.items()) #get args #print 'the atrribute:', repr(args) #pdb.set_trace() inst = class_(**args) #create new instance else: inst = d return inst def objectLoadFromFile(jsonFile): '''load json file and generate a new object instance whose name filed will be 'inst' ''' with open(jsonFile) as f: objectDict =json.load(f) obj = dict2object(objectDict) return obj #test function if name == 'main': class Person(object): def init(self,name,age, **args): obj_list = inspect.stack()[1][-2] self.name = obj_list[0].split('=')[0].strip()#object instance name self.name = name self.age = age def repr(self): return 'Person Object name : %s , age : %d' % (self.name,self.age) def say(self): #d = inspect.stack()[1][-2] #print d[0].split('.')[0].strip() return self.name def jsonDumps(self, filename=None): '''essential transformation to Python basic type in order to store as json. dumps as objectname.json if filename missed ''' if not filename: jsonfile = self.name+'.json' else: jsonfile = filename objectDumps2File(self, jsonfile) def jsonLoadTransfer(self):#TBD '''essential transformation to object required type,such as numpy matrix.call this function after newobject = objectLoadFromFile(jsonfile)''' pass p = Person('Aidan',22) #json.dumps(p)#error will be throwed #objectDumps2File(p,'Person.json') p.jsonDumps() p_l = objectLoadFromFile('p.json') print 'the decoded obj type: %s, obj:%s' % (type(p_l),repr(p_l))Es gibt zwei Arten von Python-Klassen: alt und neu. Der Zweck des Erbens von Objekten nach py 2.2 besteht darin, diese Klasse zu einer neuen Stilklasse zu machen. Diejenigen, die kein Objekt erben, sind traditionelle klassische Klassen. welches schließlich das Objekt erben wird). Es gibt zwei Methoden in der Klassendefinition:
class Person(): class Person(object)Der Unterschied ist: Wenn ein neuer Personeninstanztest erstellt wird, wird die Ausgabe vom Typ (Test) ist jeweils:
<type 'instance'> <class 'main.Person'>Das Inspektionsmodul bietet eine Reihe von Introspektionsfunktionen, mit denen Informationen über Module, Klassen, Methoden, Funktionen, Tracebacks, Frame-Objekte und Codeobjekte abgerufen werden können. Häufig verwendete Methoden sind getmembers, ismodule, getcallargs, isclass usw.
Das obige ist der detaillierte Inhalt vonPython implementiert Objekte, die JSON-Speicherung und -Analyse unterstützen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!