(TODO: Ich werde es hinzufügen, wenn mir eine Verwendung einfällt)
Ich habe eine Klasse PreDict (OPreDict) erstellt, die beim Aufruf ein Wörterbuch zurückgibt
Sie können Folgendes tun:
--Generation --Erbe --Verschmelzen
Sie können ein Wörterbuch so erstellen, als wäre es eine Klassendefinition.
class Person(OPreDict):
name = Attribute(doc="Name")
age = Attribute(doc="Alter")
print(Person())
# OrderedDict([('name', {'doc': 'Name'}), ('age', {'doc': 'Alter'})])
Es enthält auch die Reihenfolge der Klassendefinitionen.
Natürlich kann es vererbt werden, da es sich um eine Klassendefinition handelt.
class Info(PreDict): #Da es sich nicht um OPreDict handelt, wird die Bestellbeziehung nicht beibehalten
success = Attribute()
failure = Attribute()
class Info2(Info):
warnings = Attribute()
print(Info2()) # {'failure': {}, 'success': {}, 'warnings': {}}
Sie können mehrere Klassen zusammenführen.
class Student(OPreDict):
grade = Attribute(doc="Schuljahr")
print((Student + Person)())
# OrderedDict([('grade', {'doc': 'Schuljahr'}), ('name', {'doc': 'Name'}), ('age', {'doc': 'Alter'})])
Sie können auch eine Klasse generieren, der die Klasse gehört.
class Parents(OPreDict):
father = Attribute(Person, doc="Vater")
mother = Attribute(Person, doc="Mutter")
import json
print(json.dumps(Parents(), ensure_ascii=False))
{"father": {"name": {"doc": "Name"}, "age": {"doc": "Alter"}, "doc": "Vater"},
"mother": {"name": {"doc": "Name"}, "age": {"doc": "Alter"}, "doc": "Mutter"}}
Ist es möglich, so etwas wie eine Sammlung zu definieren? kann nicht. (TODO: Denk später über etwas nach)
Bisher wurde Attribut so verwendet, als wäre es nur ein Feld zum Generieren eines Wörterbuchs. Es scheint, dass Attribute durch Verwendung von "functools.partial" etwas bequemer gemacht werden können.
Zum Beispiel einen Datentyp definieren.
from functools import partial
Number = partial(Attribute, type="number")
String = partial(Attribute, type="string")
Dann können Sie den folgenden json erhalten.
class Person(OPreDict):
name = String(doc="Name")
age = Number(doc="Alter")
def pp(D):
print(json.dumps(D, indent=2, ensure_ascii=False))
pp(Person())
# {
# "name": {
# "type": "string",
# "doc": "Name"
# },
# "age": {
# "type": "number",
# "doc": "Alter"
# }
# }
Die Implementierung ist unten https://gist.github.com/podhmo/5297214c9dc3ba57ec93
Recommended Posts