Maison  >  Article  >  développement back-end  >  Python implémente des objets prenant en charge le stockage et l'analyse JSON

Python implémente des objets prenant en charge le stockage et l'analyse JSON

高洛峰
高洛峰original
2017-03-23 16:08:101305parcourir

Nous savons que le module JSON peut être utilisé pour stocker facilement des données Python de type de base (dict, liste, etc.) dans des fichiers de manière permanente, et il peut également être converti via des fonctions de conversion personnalisées et Héritent de la méthode JSON encode&decode pour implémenter le stockage des classes personnalisées. Cet article est basé sur le précédent "module Python JSON" pour implémenter l'objet de Python qui prend en charge le stockage JSON.

Il est tout à fait logique que les objets puissent stocker et analyser du JSON. Par exemple, il y a une grande quantité de calcul de données dans le processus de formation de tous les algorithmes de classification dans l'apprentissage automatique. Si l'algorithme de classification doit être recyclé à chaque démarrage de la classification, c'est un gaspillage de ressources et une classification inefficace. L'objet d'algorithme généré par la formation peut être enregistré, puis, à moins que cela ne soit nécessaire, le réglage de l'algorithme ne doit être chargé que plus tard. D'autre part, la capacité des objets à analyser et à stocker JSON permet également de les transmettre sur le réseau, ce qui revêt une grande importance dans le cloud computing et le traitement distribué des données actuels.

Afin de réaliser l'auto-stockage et l'analyse, les opérations clés de définition d'un objet sont :

0, ajouter objet_json.py copie au package, Le module qui définit l'objet importe object_json : import object_json.

1. La fonction init() doit prendre en charge un nombre variable d'appels de fonction, c'est-à-dire qu'elle doit être écrite comme init(self, …, , **args). Ce n'est qu'en définissant l'objet de cette manière qu'il pourra avoir des propriétés autres que les propriétés qui doivent être initialisées pendant la phase de construction.

2. Pour les attributs qui doivent être initialisés lors de la phase de construction de l'objet, les paramètres formels de la fonction init() doivent être exactement les mêmes que les noms de ces attributs, afin qu'ils puissent être construits via le dictionnaire. 'key' : objet de paires de valeurs.

3. Définissez un attribut « nom » – le nom de l'instance d'objet, implémenté à l'aide du module inspect. L'attribut 'name' est principalement utilisé pour générer le nom de fichier par défaut lors du stockage des objets.

4, définissez les méthodes jsonDumps() et jsonLoadTransfer(), complétez le chargement du fichier JSON de l'objet et la création d'un nouvel objet via objectLoadFromFile().

(i) jsonDumps() est utilisé pour convertir des objets en dict et stocker des objets dans des fichiers json via json.dumps() Si l'utilisateur ne spécifie pas de nom de fichier, instancename.json est le fichier de stockage par défaut. . Étant donné que JSON ne prend en charge que les types de base Python, s'il existe d'autres types dans l'objet (tels que la matrice numpy), ils doivent être convertis en types de base Python (tels que matrice.tolist() pour convertir la matrice en liste).

(ii) jsonLoadTransfer() est utilisé pour terminer la conversion du format de données et convertir certains attributs d'objet des types de base en types requis (comme mat(list) pour convertir le type de liste en matrice If). l'objet, seuls les types de base Python peuvent omettre cette méthode. Le processus de création d'un objet complet et utilisable est :

obj = objectLoadFromFile()   
obj.jsonLoadTransfer()

Le code suivant est le code source du module object_json qui prend en charge les objets personnalisés pour le stockage et l'analyse JSON.

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))

Il existe deux types de classes Python : anciennes et nouvelles. Le but de l'héritage d'objet après py 2.2 est de faire de cette classe une nouvelle classe de style. Celles qui n'héritent pas d'objet sont des classes classiques traditionnelles (. qui héritera éventuellement de l'objet).

Il existe deux méthodes dans la définition de classe :

class Person():   
class Person(object)

La différence est :

Si un nouveau test d'instance Personne est créé, la sortie de type (test) est respectivement :

<type &#39;instance&#39;>   
<class &#39;main.Person&#39;>

Le module inspect fournit une série de fonctions d'introspection, qui peuvent obtenir des informations sur les modules, les classes, les méthodes, les fonctions, les traces, les objets frame et les objets code. Les méthodes couramment utilisées sont getmembers, ismodule, getcallargs, isclass, etc.,

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn