Bonjour,
Je pensais avoir compris le fonctionnement mais la je sèche.
Voici un code tut simple qui retourne des classes différentes pour une structure identique !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from marshmallow import Schema, fields, post_load
 
class Class_test_struct1():
    def __init__(self, attr1): self.attr1=attr1
 
class Class_test_struct1Schema(Schema):
    attr1=fields.String()
 
class Class_test_struct2():
    def __init__(self, attr2): self.attr2=attr2
 
class Class_test_struct2Schema(Schema):
    attr2=fields.String()
 
class Class_test():
    def __init__(self, struct1, struct2):
        self.struct1=struct1,
        self.struct2=struct2
 
class Class_testSchema(Schema):
    struct1=fields.Nested(Class_test_struct1Schema)
    struct2=fields.Nested(Class_test_struct2Schema)
 
    @post_load
    def make_Class_test(self, data, **kwargs):
        return Class_test(**data)
 
inputJson={
    "struct1": { "attr1": "where is" },
    "struct2": { "attr2": "the bug?" }
}
 
schema = Class_testSchema()
result = schema.load(inputJson)
 
print("Returned class: %s" % type(result))
print("type(result.struct1) = %s" % type(result.struct1))
print(result.struct1)
print("type(result.struct2) = %s" % type(result.struct2))
print(result.struct2)
Résultat de l'exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Returned class: <class '__main__.Class_test'>
type(result.struct1) = <class 'tuple'>
({'attr1': 'where is'},)
type(result.struct2) = <class 'dict'>
{'attr2': 'the bug?'}
Pourquoi un tuple ??