[PYTHON] Metaklasse (delete) zum Generieren eines Wörterbuchs

Metaklasse (delete) zum Generieren eines Wörterbuchs

(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

Wie benutzt man

Sie können Folgendes tun:

--Generation --Erbe --Verschmelzen

Generieren

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.

Erbe

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': {}}

Verschmelzen

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'})])

Im Besitz

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)

Einfallsreichtum in der Verwendung von Attributen

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

Metaklasse (delete) zum Generieren eines Wörterbuchs
Fügen Sie MeCab ein Wörterbuch hinzu
Code, der zufällig eine Punktzahl generiert
Skript zum Erstellen einer Mac-Wörterbuchdatei
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.
So generieren Sie ein Python-Objekt aus JSON
Generieren Sie ein MeCab-Wörterbuch aus Nico Nico Encyclopedia-Daten
Ich habe versucht, eine zufällige Zeichenfolge zu generieren
Generieren Sie automatisch ein Polarwörterbuch für die Emotionsanalyse
So konvertieren Sie ein Klassenobjekt mit SQLAlchemy in ein Wörterbuch
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
Verwendung des Wörterbuchs {}
[Morphologische Analyse] So fügen Sie Mecab ein neues Wörterbuch hinzu
Generieren Sie ein Bash-Skript, um die Einstellungen des Datadog-Monitors hinzuzufügen
Zugriff auf Wörterbuchfelder
Generieren Sie mit apg ein leicht zu merkendes Passwort
Ich möchte automatisch einen modernen Metal-Bandnamen generieren
So generieren Sie einen öffentlichen Schlüssel aus einem privaten SSH-Schlüssel
So generieren Sie eine Abfrage mit dem IN-Operator in Django
So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
Eine relativ einfache Möglichkeit, ein NEologd-Wörterbuch in das Windows-System-Wörterbuch einzufügen
Einführung in den Wörterbuch-Suchalgorithmus
Erstellen Sie ein Wörterbuch in Python
Ein Weg zum mittleren Python
Eine super Einführung in Linux
Lassen Sie uns zufällig eine vollständige Sequenz generieren
So rufen Sie eine Funktion auf
Laden Sie eine Datei in Dropbox hoch
Senden Sie ein Signal an den Unterprozess
Wie man ein Terminal hackt
Versuchen Sie, eine Sprache auszuwählen
Fügen Sie MeCab ein Benutzerwörterbuch hinzu
Erweitern Sie ein in Python verschachteltes Wörterbuch, um etwas wie Pandas MultiIndex zu tun
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python