Die oberste Antwort ist richtig .
Aber vielleicht kommen die Leser hierher, weil sie Antworten auf ähnlich benannte innere Klassen suchen. Sie sind in populären Bibliotheken vorhanden, wie z.B. Django
y WTForms
.
Wie DavidW in den Kommentaren unter dieser Antwort anmerkt, diese sind bibliotheksspezifische Funktionen und sind nicht zu verwechseln mit den erweiterten, nicht verwandten Python-Sprache Merkmal mit ähnlichem Namen .
Vielmehr handelt es sich um Namensräume innerhalb der Dicts von Klassen. Aus Gründen der Lesbarkeit werden sie mit inneren Klassen konstruiert.
In diesem Beispiel ein spezielles Feld, abstract
ist sichtbar von den Feldern des Autorenmodells getrennt.
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
class Meta:
abstract = True
Ein weiteres Beispiel findet sich in der Dokumentation zu WTForms
:
from wtforms.form import Form
from wtforms.csrf.session import SessionCSRF
from wtforms.fields import StringField
class MyBaseForm(Form):
class Meta:
csrf = True
csrf_class = SessionCSRF
name = StringField("name")
Diese Syntax wird in der Programmiersprache Python nicht besonders behandelt. Meta
ist hier kein Schlüsselwort und löst auch kein Metaklassenverhalten aus. Vielmehr wird der Code von Bibliotheken Dritter in Paketen wie Django
y WTForms
liest diese Eigenschaft unter anderem in den Konstruktoren bestimmter Klassen.
Das Vorhandensein dieser Deklarationen ändert das Verhalten der Klassen, die diese Deklarationen haben. Zum Beispiel, WTForms
liest self.Meta.csrf
um festzustellen, ob das Formular eine csrf
Feld.