2017-09-01 1 views
0

Ich möchte meine Klasse JSON serializeable und versuchen, es mit der JSONEncoder Klasse zu erweitern. Warum nimmt die default Funktion jedoch den o Parameter, wenn es eine Methode meiner Klasse sein soll.Python JSON Encoder - Standardmethode

Ich möchte mein Klassenobjekt serialisieren, nicht ein drittes Objekt, das an die Methode übergeben wird?

Implementieren Sie diese Methode in einer Unterklasse, sodass sie ein serialisierbares Objekt für o zurückgibt oder die Basisimplementierung aufruft (um einen TypeError auszulösen).

def default(self, o): 
    try: 
     iterable = iter(o) 
    except TypeError: 
     pass 
    else: 
     return list(iterable) 
    # Let the base class default method raise the TypeError 
    return JSONEncoder.default(self, o) 
+1

Sie erweitern Ihre Klasse nicht mit JSONEncoder, Sie erweitern JSONEncoder, um Ihre Klasse zu behandeln. – glibdud

+0

Die Klasse, die serialisierbar sein soll *, soll nicht von 'JSONEncoder' übernommen werden ... das ist dein grundlegendes Missverständnis. –

Antwort

0

sollten Sie etwas tun:

>>> import json 
>>> class ComplexEncoder(json.JSONEncoder): 
...  def default(self, obj): 
...   if isinstance(obj, complex): 
...    return [obj.real, obj.imag] 
...   # Let the base class default method raise the TypeError 
...   return json.JSONEncoder.default(self, obj) 

vielleicht json Sie vergessen endlich Rückkehr.
Werfen Sie einen Blick auf json doc