Python 2.7 telah mencapai akhir dukungan
dan akan
dihentikan penggunaannya
pada 31 Januari 2026. Setelah penghentian penggunaan, Anda tidak akan dapat men-deploy aplikasi Python 2.7, meskipun organisasi Anda sebelumnya menggunakan kebijakan organisasi untuk mengaktifkan kembali deployment runtime lama. Aplikasi Python 2.7 yang ada akan terus berjalan dan menerima traffic setelah
tanggal penghentiannya. Sebaiknya Anda
bermigrasi ke versi Python terbaru yang didukung.
Class Properti
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Catatan:
Developer yang membuat aplikasi baru sangat dianjurkan untuk menggunakan
Library Klien NDB, yang memiliki beberapa manfaat
dibandingkan dengan library klien ini, seperti menyimpan entity dalam cache secara otomatis melalui Memcache API. Jika saat ini Anda menggunakan Library Klien DB versi lama, baca
Panduan Migrasi DB ke NDB
Class Properti adalah superclass dari definisi properti untuk model data. Class Properti menentukan jenis nilai properti, cara nilai divalidasi, dan cara nilai disimpan di datastore.
Property
disediakan oleh modul google.appengine.ext.db
.
Pengantar
Class properti menjelaskan jenis nilai, nilai default, logika validasi, dan fitur lain dari properti Model. Setiap class properti adalah subclass dari class Properti. Datastore API menyertakan class properti untuk setiap jenis nilai datastore, dan beberapa jenis lainnya yang menyediakan fitur tambahan selain jenis datastore. Lihat Jenis dan Properti Class.
Class properti dapat menerima konfigurasi dari argumen yang diteruskan ke konstruktor. Konstruktor class dasar mendukung beberapa argumen yang biasanya didukung di semua class properti, termasuk semua yang disediakan dalam datastore API. Konfigurasi tersebut dapat menyertakan nilai default, terlepas dari apakah nilai eksplisit diperlukan atau tidak, daftar nilai yang dapat diterima, dan logika validasi khusus. Lihat dokumentasi untuk jenis properti tertentu guna mendapatkan informasi selengkapnya tentang cara mengonfigurasi properti.
Class properti menentukan model untuk properti datastore. Class tidak berisi nilai properti untuk instance model. Instance class Properti adalah milik class Model, bukan instance class. Dalam istilah Python, instance class properti adalah "deskriptor" yang menyesuaikan perilaku atribut instance Model. Lihat dokumentasi Python untuk mengetahui informasi selengkapnya tentang deskriptor.
Konstruktor
Konstruktor class dasar Properti didefinisikan sebagai berikut:
- class Property(verbose_name=None, name=None, default=None, required=False, validator=None, choices=None, indexed=True)
-
Superclass definisi properti model.
Argumen
- verbose_name
- Nama properti yang mudah digunakan. Ini harus selalu menjadi argumen pertama bagi konstruktor properti. Library
djangoforms
menggunakannya untuk membuat label bagi kolom formulir, dan pengguna lain dapat menggunakannya untuk tujuan serupa.
- name
- Nama penyimpanan untuk properti, yang digunakan dalam kueri. Nilai ini ditetapkan secara default ke nama atribut yang digunakan untuk properti. Karena class model memiliki atribut selain properti (yang tidak dapat digunakan untuk properti), properti dapat menggunakan name untuk menggunakan nama atribut yang dicadangkan sebagai nama properti di datastore, dan menggunakan nama yang berbeda untuk atribut properti. Lihat Nama Properti yang Tidak Diizinkan untuk informasi selengkapnya.
- default
-
Nilai default untuk properti. Jika nilai properti tidak pernah diberikan nilai, atau diberi nilai None
, nilai tersebut akan dianggap sebagai nilai default.
Catatan: Definisi class model disimpan dalam cache bersama dengan kode aplikasi lainnya. Ini termasuk menyimpan nilai default untuk properti dalam cache. Jangan tetapkan default dalam definisi model dengan data khusus untuk permintaan (seperti users.get_current_user()
). Sebagai gantinya, tentukan metode __init__()
untuk class Model yang menginisialisasi nilai properti.
- required
-
Jika True
, properti tidak boleh memiliki nilai None
. Instance model harus melakukan inisialisasi semua properti yang diperlukan dalam konstruktornya agar instance tersebut tidak dibuat dengan nilai yang hilang. Percobaan untuk membuat instance tanpa menginisialisasi properti yang diperlukan, atau upaya untuk menetapkan None
ke properti yang diperlukan, akan memunculkan BadValueError.
Properti yang diperlukan dan memiliki nilai default akan menggunakan nilai default jika tidak diberikan dalam konstruktor. Namun, properti tidak dapat diberi nilai None
, dan tidak ada cara otomatis untuk memulihkan nilai default setelah nilai lain ditetapkan. Anda dapat mengakses atribut default
properti kapan saja untuk mendapatkan nilai ini dan menetapkannya secara eksplisit.
- validator
- Fungsi yang harus dipanggil untuk memvalidasi nilai properti saat nilai ditetapkan. Fungsi ini menggunakan nilai sebagai satu-satunya argumen, dan memunculkan pengecualian jika nilai tidak valid. Validator tertentu dipanggil setelah validasi lain dilakukan, seperti pemeriksaan apakah properti yang diperlukan memiliki nilai. Jika properti yang tidak diperlukan tidak diberi nilai, validator dipanggil dengan argumen
None
.
- choices
- Daftar nilai yang dapat diterima untuk properti. Jika ditetapkan, properti tidak dapat diberi nilai yang tidak ada dalam daftar. Seperti halnya validasi required dan lainnya, instance model harus menginisialisasi semua properti dengan pilihan agar instance tidak dibuat dengan nilai yang tidak valid. Jika choices adalah
None
, semua nilai yang lolos validasi dapat diterima.
- indexed
-
Properti ini harus disertakan dalam indeks bawaan dan yang ditentukan developer. Jika False
, entity yang ditulis ke datastore tidak akan pernah ditampilkan oleh kueri yang mengurutkan atau memfilter properti ini, mirip dengan properti Blob dan Text.
Catatan: Setiap properti yang diindeks menambahkan sejumlah kecil overhead, biaya CPU, dan latensi ke panggilan put()
dan delete()
. Jika Anda tidak perlu memfilter atau mengurutkan properti, sebaiknya gunakan indexed=False
untuk menghindari overhead tersebut. Namun, berhati-hatilah! Jika nantinya Anda memutuskan ingin properti diindeks, mengubahnya kembali ke indexed=True
hanya akan memengaruhi penulisan sejak saat itu dan seterusnya. Entity yang awalnya ditulis dengan indexed=False
tidak akan diindeks ulang.
Atribut Class
Subclass dari class Properti mendefinisikan atribut class berikut:
data_type
- Jenis data atau class Python yang diterima properti sebagai nilai native Python.
Metode Instance
Instance class Properti memiliki metode berikut:
- default_value()
-
Menampilkan nilai default untuk properti. Implementasi dasar menggunakan nilai argumen default yang diteruskan ke konstruktor. Class properti dapat mengganti class ini untuk memberikan perilaku nilai default khusus, seperti fitur auto-now DateTimeProperty.
- validate(value)
-
Rutinitas validasi lengkap untuk properti. Jika value valid, nilai akan ditampilkan, baik yang tidak berubah atau telah disesuaikan dengan jenis yang diperlukan. Jika tidak, pengecualian yang sesuai akan dimunculkan.
Implementasi dasar memeriksa bahwa value bukan None
jika diperlukan (argumen required untuk konstruktor Properti dasar), nilai adalah salah satu pilihan yang valid jika properti dikonfigurasi dengan pilihan (argumen choices), dan nilai akan diteruskan ke validator kustom jika ada (argumen validator).
Rutinitas validasi dipanggil saat model yang menggunakan jenis properti dibuat menjadi instance (dengan nilai yang diinisialisasi atau default), dan saat properti jenis diberi nilai. Rutinitas seharusnya tidak memiliki efek samping.
- empty(value)
-
Menampilkan True
jika value dianggap sebagai nilai kosong untuk jenis properti ini. Implementasi dasar setara dengan not value
, yang cukup untuk sebagian besar jenis. Jenis lain, seperti jenis Boolean, dapat mengganti metode ini dengan pengujian yang lebih sesuai.
- get_value_for_datastore(model_instance)
-
Menampilkan nilai yang harus disimpan di datastore untuk properti ini dalam instance model yang diberikan. Implementasi dasar hanya menampilkan nilai native Python properti di instance model. Class properti dapat mengganti class ini untuk menggunakan jenis data yang berbeda untuk datastore dibandingkan untuk instance model, atau untuk melakukan konversi data lain tepat sebelum menyimpan instance model.
- make_value_from_datastore(value)
-
Menampilkan representasi berbasis Python untuk nilai yang diberikan dari datastore. Implementasi dasar hanya menampilkan nilai. Class properti dapat mengganti class ini untuk menggunakan jenis data yang berbeda untuk instance model dan untuk datastore.
- make_value_from_datastore_index_value(value)
-
Menampilkan representasi native Python untuk nilai yang diberikan dari indeks datastore. Implementasi dasar hanya menampilkan nilai. Class properti dapat mengganti class ini untuk menggunakan jenis data yang berbeda untuk instance model dan untuk datastore.
Kecuali dinyatakan lain, konten di halaman ini dilisensikan berdasarkan Lisensi Creative Commons Attribution 4.0, sedangkan contoh kode dilisensikan berdasarkan Lisensi Apache 2.0. Untuk mengetahui informasi selengkapnya, lihat Kebijakan Situs Google Developers. Java adalah merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-08-19 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Sulit dipahami","hardToUnderstand","thumb-down"],["Informasi atau kode contoh salah","incorrectInformationOrSampleCode","thumb-down"],["Informasi/contoh yang saya butuhkan tidak ada","missingTheInformationSamplesINeed","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 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."]]