Attributklasse
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Hinweis: Entwicklern von neuen Anwendungen wird dringend empfohlen, die NDB-Clientbibliothek zu verwenden. Diese bietet im Vergleich zur vorliegenden Clientbibliothek verschiedene Vorteile, z. B. das automatische Caching von Entitäten über die Memcache API. Wenn Sie derzeit die ältere DB-Clientbibliothek verwenden, finden Sie weitere Informationen im Leitfaden zur Migration von DB- zu NDB-Clientbibliotheken.
Bei der Property-Klasse handelt es sich um die übergeordnete Klasse von Property-Definitionen für Datenmodelle. Die Property-Klasse definiert den Typ eines Property-Werts, d. h., wie Werte validiert und im Datenspeicher gespeichert werden.
Property
wird vom Modul google.appengine.ext.db
bereitgestellt.
Einführung
Eine Property-Kasse beschreibt den Werttyp, den Standardwert, die Validierungslogik und andere Merkmale einer Property eines Modells. Jede Property-Klasse ist eine Unterklasse der Property-Klasse. Das Datenspeicher-API umfasst Property-Klassen für alle Datenspeicherwerttypen sowie verschiedene weitere Property-Klassen, die neben den Datenspeichertypen zusätzliche Funktionen bereitstellen. Weitere Informationen finden Sie unter Typen und Attributklassen.
Property-Klassen können die Konfiguration von Argumenten übernehmen, die an den Konstruktor übergeben werden. Vom Basisklassenkonstruktor werden verschiedene Argumente unterstützt, die in der Regel in allen Property-Klassen unterstützt werden. Dazu zählen alle jene, die in der Datastore API bereitgestellt werden. Eine solche Konfiguration kann Folgendes umfassen: einen Standardwert, ob ein ausdrücklicher Wert erforderlich ist, eine Liste mit zulässigen Werten und benutzerdefinierte Validierungslogik. Weitere Informationen zum Konfigurieren der Property finden Sie in der Dokumentation für einen bestimmten Property-Typ.
Mit einer Property-Klasse wird das Modell für eine Datenspeicher-Property definiert. Der Property-Wert für eine Modellinstanz ist nicht enthalten. Instanzen der Property-Klasse zählen zur Modellklasse, nicht zu den Instanzen der Klasse. In Verbindung mit Python sind Instanzen von Property-Klassen "Deskriptoren", die das Verhalten der Attribute von Modellinstanzen anpassen. Weitere Informationen zu Deskriptoren finden Sie in der Python-Dokumentation.
Konstruktor
Der Konstruktor der Property-Basisklasse ist wie folgt definiert:
- class Property(verbose_name=None, name=None, default=None, required=False, validator=None, choices=None, indexed=True)
-
Die übergeordnete Klasse der Modell-Property-Definitionen.
Argumente
- verbose_name
- Ein nutzerfreundlicher Name des Attributs. Es muss sich immer um das erste Argument für einen Property-Konstruktor handeln. In der
djangoforms
-Bibliothek wird dieser Wert zum Erstellen von Bezeichnungen für Formularfelder verwendet.
- name
- Der Speichername für das Attribut, der in Anfragen verwendet wird. Standardmäßig wird der Attributname verwendet, der für die Property verwendet wird. Modellklassen können Attribute haben, die keine Properties sind und nicht als solche verwendet werden können. Aus diesem Grund kann für eine Property mithilfe von name im Datenspeicher ein reservierter Attributname als Property-Name verwendet werden. Für das Property-Attribut ist in diesem Fall ein anderer Name wählbar. Weitere Informationen finden Sie unter Nicht zulässige Attributamen.
- Standardeinstellung
-
Ein Standardwert für die Property. Wenn dem Attributswert kein Wert oder der Wert None
zugewiesen wird, wird der Wert als Standardwert betrachtet.
Hinweis: Modellklassendefinitionen werden zusammen mit dem restlichen Anwendungscode im Cache gespeichert. Auch Standardwerte für Properties werden im Cache gespeichert. Legen Sie in der Modelldefinition keinen Standardwert mit spezifischen Daten für die Anfrage fest (z. B. users.get_current_user()
). Definieren Sie stattdessen eine __init__()
-Methode für die Klasse "Model", die die Attributwerte initialisiert.
- required
-
Bei True
kann das Attribut nicht den Wert None
haben. Mit einer Modellinstanz müssen alle erforderlichen Properties in deren Konstruktor initialisiert werden, damit die Instanz nicht mit fehlenden Werten erstellt wird. Der Versuch, eine Instanz zu erstellen, ohne ein erforderliches Attribut zu initialisieren, oder der Versuch, einem erforderlichen Attribut None
zuzuweisen, führt zu einem BadValueError.
Bei Properties, die sowohl erforderlich sind, als auch einen Standardwert aufweisen, wird der Standardwert verwendet, sofern keiner im Konstruktor angegeben ist. Dem Attribut kann allerdings nicht der Wert None
zugeordnet werden. Außerdem gibt es keine Standardlösung zum Wiederherstellen des Standardwerts, nachdem ein anderer Wert zugeordnet wurde. Sie können jederzeit auf das default
-Attribut der Property zugreifen, um diesen Wert abzurufen und diesen ausdrücklich zuzuordnen.
- Validator
- Eine Funktion, die bei der Zuweisung des Attributswerts aufgerufen werden sollte, um den Wert zu validieren. Bei der Funktion wird der Wert als einziges Argument verwendet. Es wird eine Ausnahme ausgegeben, wenn der Wert ungültig ist. Das jeweilige Validierungselement wird nach dem Durchführen anderer Validierungen abgerufen. Zu diesen Validierungen zählt etwa die Prüfung, ob eine erforderliche Property einen Wert aufweist. Wenn einem nicht erforderlichen Attribut kein Wert zugewiesen wird, erfolgt die Validierung mit dem Argument
None
.
- choices
- Eine Liste zulässiger Werte für das Attribut. Der Property kann kein Wert zugeordnet werden, der nicht in der Liste enthalten ist, wenn diese Funktion festgelegt wurde. Ähnlich der required-Validierung und anderer Validierungen müssen bei einer Modellinstanz alle Attribute mit "choices" initialisiert werden, damit die Instanz nicht mit ungültigen Werten erstellt wird. Es sind alle Werte zulässig, die mit der sonstigen Validierung übereinstimmen, wenn choices den Wert
None
hat.
- indexed
-
Gibt an, ob diese Property in die integrierten und von Entwicklern definierten Indexe einbezogen werden soll. Bei False
werden in den Datenspeicher geschriebene Entitäten niemals von Abfragen zurückgegeben, die nach diesem Attribut sortieren oder filtern – ähnlich wie die Attribute Blob und Text.
Hinweis: Bei jedem indizierten Attribut kommt es bei den Aufrufen put()
und delete()
zu Mehraufwand, zu erhöhter Prozessorauslastung und zu Latenz. Ziehen Sie die Verwendung von indexed=False
in Betracht, wenn Attribute nicht gefiltert oder sortiert werden müssen, um diesen Mehraufwand zu vermeiden. Gehen Sie jedoch umsichtig vor. Für den Fall, dass Sie später beschließen, dass das Attribut indiziert sein soll, sind von der Änderung zurück in indexed=True
nur Schreibvorgänge ab diesem Zeitpunkt betroffen. Entitäten, die ursprünglich mit indexed=False
geschrieben wurden, werden nicht neu indiziert.
Klassenattribute
Von abgeleiteten Klassen der Property-Klassen werden die folgenden Klassenattribute definiert:
data_type
- Der Python-Datentyp oder die Python-Klasse, der oder die bei der Property als nativer Python-Wert zulässig ist.
Instanzmethoden
Instanzen von Property-Klassen weisen die folgenden Methoden auf:
- default_value()
-
Gibt den Standardwert für die Property zurück. Bei der Basisimplementierung wird der Wert des Arguments default verwendet, das an den Konstruktor gesendet wurde. Dies kann durch eine Attributklasse außer Kraft gesetzt werden, um ein spezielles Verhalten für den Standardwert zu bewirken, beispielsweise mit der Funktion "auto_now" von DateTimeProperty.
- validate(value)
-
Die vollständige Validierungsroutine für die Property. Wenn value gültig ist, wird der Wert unverändert oder an den erforderlichen Typ angepasst zurückgegeben. Anderenfalls wird eine entsprechende Ausnahme ausgegeben.
Bei der Basisimplementierung wird geprüft, ob folgende Voraussetzungen erfüllt sind: value ist nicht None
(falls nötig) – dies ist das Argument required für den grundlegenden Attribut-Konstruktor. Der Wert ist eine der gültigen Auswahloptionen, wenn das Attribut mit Auswahloptionen bzw. dem Argument choices konfiguriert wurde. Außerdem muss der Wert in der benutzerdefinierten Validierung mit dem Argument validator akzeptiert werden.
Die Validierungsroutine wird abgerufen, wenn ein Modell mit Standardwerten oder initialisierten Werten instanziiert wird, bei dem der Property-Typ verwendet wird. Darüber hinaus wird sie abgerufen, wenn einer Property des Typs ein Wert zugeordnet wird. Die Routine sollte keine Nebenwirkungen haben.
- empty(value)
-
Gibt True
zurück, wenn value als leerer Wert für diesen Attributstypen gewertet wird. Die Basisimplementierung entspricht not value
. Dies reicht für die meisten Typen aus. Bei anderen Typen, etwa einem booleschen Typ, kann dieser Typ mit einem geeigneteren Test überschrieben werden.
- get_value_for_datastore(model_instance)
-
Gibt den Wert zurück, der im Datenspeicher für diese Property in der entsprechenden Modellinstanz gespeichert werden sollte. Bei dieser Basisimplementierung wird schlicht der native Python-Wert der Property in der Modellinstanz zurückgegeben. Mit einer Property-Klasse kann diese Funktion so überschrieben werden, dass für den Datenspeicher ein anderer Datentyp als für die Modellinstanz verwendet wird oder dass direkt vor dem Speichern der Modellinstanz eine andere Datenkonvertierung durchgeführt wird.
- make_value_from_datastore(value)
-
Gibt aus dem Datenspeicher die native Python-Darstellung für den gegebenen Wert zurück. Bei der Basisimplementierung wird einfach der Wert zurückgegeben. Mit einer Property-Klasse kann diese Funktion so überschrieben werden, dass für die Modellinstanz ein anderer Datentyp als für den Datenspeicher verwendet wird.
- make_value_from_datastore_index_value(value)
-
Gibt die Python-native Darstellung eines Werts aus dem Datenspeicherindex zurück. Bei der Basisimplementierung wird einfach der Wert zurückgegeben. Mit einer Property-Klasse kann diese Funktion so überschrieben werden, dass für die Modellinstanz ein anderer Datentyp als für den Datenspeicher verwendet wird.
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2025-08-19 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Schwer verständlich","hardToUnderstand","thumb-down"],["Informationen oder Beispielcode falsch","incorrectInformationOrSampleCode","thumb-down"],["Benötigte Informationen/Beispiele nicht gefunden","missingTheInformationSamplesINeed","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-08-19 (UTC)."],[[["\u003cp\u003eDevelopers should utilize the NDB Client Library for new applications due to its advantages, such as automatic entity caching.\u003c/p\u003e\n"],["\u003cp\u003eThe Property class, found in \u003ccode\u003egoogle.appengine.ext.db\u003c/code\u003e, serves as the foundation for defining data model properties, including their type, validation, and storage method.\u003c/p\u003e\n"],["\u003cp\u003eA Property class instance is a descriptor within a Model class, dictating the behavior of Model instance attributes but not storing the property's value for each specific model.\u003c/p\u003e\n"],["\u003cp\u003eThe Property class constructor allows for configuring properties with settings like default values, requirement status, validation rules, acceptable choices, and whether they are indexed for queries.\u003c/p\u003e\n"],["\u003cp\u003eProperty class instances offer methods such as \u003ccode\u003evalidate()\u003c/code\u003e, \u003ccode\u003eempty()\u003c/code\u003e, \u003ccode\u003eget_value_for_datastore()\u003c/code\u003e, and more, which define how values are handled, validated, and stored in the datastore.\u003c/p\u003e\n"]]],[],null,["# The Property Class\n\n**Note:**\nDevelopers building new applications are **strongly encouraged** to use the\n[NDB Client Library](/appengine/docs/legacy/standard/python/ndb), which has several benefits\ncompared to this client library, such as automatic entity caching via the Memcache\nAPI. If you are currently using the older DB Client Library, read the\n[DB to NDB Migration Guide](/appengine/docs/legacy/standard/python/ndb/db_to_ndb)\n\nThe Property class is the superclass of property definitions for data models. A Property class defines the type of a property's value, how values are validated, and how values are stored in the datastore.\n\n`Property` is provided by the `google.appengine.ext.db` module.\n\nIntroduction\n------------\n\nA property class describes the value type, default value, validation logic and other features of a property of a [Model](/appengine/docs/legacy/standard/python/datastore/modelclass). Each property class is a subclass of the Property class. The datastore API includes property classes for each of the datastore value types, and several others that provide additional features on top of the datastore types. See [Types and Property Classes](/appengine/docs/legacy/standard/python/datastore/typesandpropertyclasses).\n\nA property class can accept configuration from arguments passed to the constructor. The base class constructor supports several arguments that are typically supported in all property classes, including all those provided in the datastore API. Such configuration can include a default value, whether or not an explicit value is required, a list of acceptable values, and custom validation logic. See the documentation for a specific property type for more information on configuring the property.\n\n\nA property class defines the model for a datastore property. It does not contain the property value for a model instance. Instances of the Property class belong to the Model class, not instances of the class. In Python terms, property class instances are \"descriptors\" that customize how attributes of Model instances behave. See [the Python documentation](http://docs.python.org/2/reference/datamodel.html#customizing-attribute-access) for more information about descriptors.\n\nConstructor\n-----------\n\nThe constructor of the Property base class is defined as follows:\n\nclass Property(verbose_name=None, name=None, default=None, required=False, validator=None, choices=None, indexed=True)\n\n: The superclass of model property definitions.\n\n Arguments\n\n verbose_name\n : A user-friendly name of the property. This must always be the first argument to a property constructor. The `djangoforms` library uses this to make labels for form fields, and others can use it for a similar purpose.\n\n name\n : The storage name for the property, used in queries. This defaults to the attribute name used for the property. Because model classes have attributes other than properties (which cannot be used for properties), a property can use name to use a reserved attribute name as the property name in the datastore, and use a different name for the property attribute. See [Disallowed Property Names](/appengine/docs/legacy/standard/python/datastore/modelclass#Disallowed_Property_Names) for more information.\n\n default\n\n : A default value for the property. If the property value is never given a value, or is given a value of `None`, then the value is considered to be the default value.\n\n **Note:** Model class definitions are cached along with the rest of the application code. This includes caching default values for properties. Do not set a default in the model definition with data specific to the request (such as [users.get_current_user()](/appengine/docs/legacy/standard/python/refdocs/modules/google/appengine/api/users#get_current_user)). Instead, define an `__init__()` method for the [Model](/appengine/docs/legacy/standard/python/datastore/modelclass) class that initializes the property values.\n\n required\n\n : If `True`, the property cannot have a value of `None`. A model instance must initialize all required properties in its constructor so that the instance is not created with missing values. An attempt to create an instance without initializing a required property, or an attempt to assign `None` to a required property, raises a [BadValueError](/appengine/docs/legacy/standard/python/datastore/exceptions#BadValueError).\n\n A property that is both required and has a default value uses the default value if one is not given in the constructor. However, the property cannot be assigned a value of `None`, and there is no automatic way to restore the default value after another value has been assigned. You can always access the property's `default` attribute to get this value and assign it explicitly.\n\n validator\n : A function that should be called to validate the property's value when the value is assigned. The function takes the value as its only argument, and raises an exception if the value is invalid. The given validator is called after other validation has taken place, such as the check that a required property has a value. When a non-required property is not given a value, the validator is called with argument `None`.\n\n choices\n : A list of acceptable values for the property. If set, the property cannot be assigned a value not in the list. As with required and other validation, a model instance must initialize all properties with choices so that the instance is not created with invalid values. If choices is `None`, then all values that otherwise pass validation are acceptable.\n\n indexed\n\n : Whether this property should be included in the built-in and developer-defined [indexes](/appengine/docs/legacy/standard/python/datastore/indexes). If `False`, entities written to the datastore will never be returned by queries that sort or filter on this property, similar to [Blob](/appengine/docs/legacy/standard/python/datastore/typesandpropertyclasses#Blob) and [Text](/appengine/docs/legacy/standard/python/datastore/typesandpropertyclasses#Text) properties.\n\n **Note:** Every indexed property adds a small amount of overhead, CPU cost, and latency to `put()` and `delete()` calls. If you'll never need to filter or sort on a property, consider using `indexed=False` to avoid that overhead. Be careful, though! If you decide later that you want the property indexed after all, changing it back to `indexed=True` will only affect writes from that point onward. Entities that were originally written with `indexed=False` will not be re-indexed.\n\nClass Attributes\n----------------\n\nSubclasses of the Property class define the following class attribute:\n\n`data_type`\n: The Python data type or class the property accepts as a Python-native value.\n\nInstance Methods\n----------------\n\nInstances of Property classes have the following methods:\n\ndefault_value()\n\n: Returns the default value for the property. The base implementation uses the value of the default argument passed to the constructor. A property class could override this to provide special default value behavior, such as [DateTimeProperty](/appengine/docs/legacy/standard/python/datastore/typesandpropertyclasses#DateTimeProperty)'s auto-now feature.\n\nvalidate(value)\n\n: The complete validation routine for the property. If value is valid, it returns the value, either unchanged or adapted to the required type. Otherwise it raises an appropriate exception.\n\n The base implementation checks that value is not `None` if required (the required argument to the base Property constructor), the value is one of the valid choices if the property was configured with choices (the choices argument), and the value passes the custom validator if any (the validator argument).\n\n The validation routine is called when a model using the property type is instantiated (with default or initialized values), and when a property of the type is assigned a value. The routine should not have side effects.\n\nempty(value)\n\n: Returns `True` if value is considered an empty value for this property type. The base implementation is equivalent to `not value`, which is sufficient for most types. Other types, like a Boolean type, can override this method with a more appropriate test.\n\nget_value_for_datastore(model_instance)\n\n: Returns the value that ought to be stored in the datastore for this property in the given model instance. The base implementation simply returns the Python-native value of the property in the model instance. A property class can override this to use a different data type for the datastore than for the model instance, or to perform other data conversion just prior to storing the model instance.\n\nmake_value_from_datastore(value)\n\n: Returns the Python-native representation for the given value from the datastore. The base implementation simply returns the value. A property class can override this to use a different data type for the model instance than for the datastore.\n\nmake_value_from_datastore_index_value(value)\n\n: Returns the Python-native representation for the given value from the datastore index. The base implementation simply returns the value. A property class can override this to use a different data type for the model instance than for the datastore."]]