(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