Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Penghias `@property` Python berfungsi Berbanding dengan Fungsi `property()`?
Dalam Python, @property decorator ialah alat yang berkuasa untuk mentakrifkan sifat, menyediakan akses mudah kepada atribut objek. Walau bagaimanapun, kadangkala boleh mengelirukan cara penghias berfungsi, terutamanya apabila digunakan bersama dengan fungsi terbina dalam sifat.
Fungsi property() mengembalikan objek deskriptor khas. Objek ini bertindak sebagai perantara antara contoh kelas dan atribut yang diakses. Apabila objek deskriptor diakses, kaedah __get__ yang sepadan dipanggil.
Dalam kes penghias @property, kaedah __get__ untuk objek deskriptor ditetapkan kepada fungsi yang dianotasi dengan penghias. Contohnya, dalam kod berikut:
class C: def __init__(self): self._x = None @property def x(self): return self._x
Penghias @property mencipta objek deskriptor dan memperuntukkan fungsi x kepada kaedah __get__nya. Apabila sifat x diakses daripada contoh C, kaedah __get__ dipanggil, menghantar contoh dan kelas sebagai argumen.
c = C() c.x # calls c.__get__(instance=c, type=C)
Sebaliknya, fungsi property(), apabila digunakan secara langsung, mengambil argumen untuk fungsi getter, setter dan deleter. Argumen ini digunakan untuk mengkonfigurasi kefungsian objek deskriptor. Walau bagaimanapun, apabila digunakan sebagai penghias, penghias @property tidak menyatakan hujah ini secara eksplisit kerana ia mencipta objek deskriptor dengan gelagat yang ditakrifkan dalam fungsi yang dihias.
Kod berikut menunjukkan cara menggunakan sifat() fungsi dan penghias @property untuk mencipta sifat yang serupa:
class C: def __init__(self): self._x = None # Using property() function x = property(lambda self: self._x, lambda self, value: self._x) # Using @property decorator @property def x(self): return self._x
Dalam kedua-dua kes, mengakses sifat x akan mengembalikan atribut peribadi _x.
Ringkasnya, penghias @property ialah trengkas yang mudah untuk mencipta objek deskriptor yang membolehkan akses mudah kepada atribut contoh. Ia secara automatik mencipta objek deskriptor dengan fungsi getter yang ditetapkan kepada fungsi yang dihias, menjadikannya alat yang berkuasa untuk mengurus atribut kelas.
Atas ialah kandungan terperinci Bagaimanakah Penghias `@property` Python berfungsi Berbanding dengan Fungsi `property()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!