(TODO: je l'ajouterai si je peux penser à une utilisation)
J'ai créé une classe PreDict (OPreDict) qui renvoie un dictionnaire lorsqu'elle est appelée
Vous pouvez faire ce qui suit:
--Génération --Héritage --Fusionner
Vous pouvez créer un dictionnaire comme s'il s'agissait d'une définition de classe.
class Person(OPreDict):
    name = Attribute(doc="Nom")
    age = Attribute(doc="âge")
print(Person())
# OrderedDict([('name', {'doc': 'Nom'}), ('age', {'doc': 'âge'})])
Il contient également la relation de classement des définitions de classe.
Bien sûr, il peut être hérité car il s'agit d'une définition de classe.
class Info(PreDict):  #Puisqu'il n'est pas OPreDict, il ne maintient pas la relation de commande
    success = Attribute()
    failure = Attribute()
class Info2(Info):
    warnings = Attribute()
print(Info2())  # {'failure': {}, 'success': {}, 'warnings': {}}
Vous pouvez fusionner plusieurs classes ensemble.
class Student(OPreDict):
    grade = Attribute(doc="Année scolaire")
print((Student + Person)())
# OrderedDict([('grade', {'doc': 'Année scolaire'}), ('name', {'doc': 'Nom'}), ('age', {'doc': 'âge'})])
Vous pouvez également générer une classe propriétaire de la classe.
class Parents(OPreDict):
    father = Attribute(Person, doc="père")
    mother = Attribute(Person, doc="mère")
import json
print(json.dumps(Parents(), ensure_ascii=False))
{"father": {"name": {"doc": "Nom"}, "age": {"doc": "âge"}, "doc": "père"},
 "mother": {"name": {"doc": "Nom"}, "age": {"doc": "âge"}, "doc": "mère"}}
Est-il possible de définir quelque chose comme une collection? ne peux pas. (TODO: Pensez à quelque chose plus tard)
Jusqu'à présent, Attribute a été utilisé comme s'il s'agissait simplement d'un champ pour générer un dictionnaire.
Il semble que Attribute puisse être rendu un peu plus pratique en utilisant functools.partial.
Par exemple, définir un type de données.
from functools import partial
Number = partial(Attribute, type="number")
String = partial(Attribute, type="string")
Ensuite, vous pouvez obtenir le fichier json suivant.
class Person(OPreDict):
    name = String(doc="Nom")
    age = Number(doc="âge")
def pp(D):
    print(json.dumps(D, indent=2, ensure_ascii=False))
pp(Person())
# {
#   "name": {
#     "type": "string", 
#     "doc": "Nom"
#   }, 
#   "age": {
#     "type": "number", 
#     "doc": "âge"
#   }
# }
La mise en œuvre est ci-dessous https://gist.github.com/podhmo/5297214c9dc3ba57ec93
Recommended Posts