Memahami @property Decorator dalam Python
Dalam Python, @property decorator membenarkan anda mencipta sifat yang berkelakuan seperti atribut contoh biasa. Walau bagaimanapun, tidak seperti fungsi harta terbina dalam yang mengambil hujah, penghias @property tidak menerima sebarang hujah secara eksplisit.
Cara Ia Berfungsi
Untuk memahami cara @property penghias berfungsi, adalah penting untuk memahami dahulu bahawa fungsi property() mengembalikan objek deskriptor. Ini ialah perantara yang terletak di antara kejadian dan hartanya, membenarkan logik tambahan digunakan.
Objek Deskriptor
Objek deskriptor dikembalikan oleh harta( ) fungsi mempunyai tiga kaedah terbina dalam:
Mencipta Hartanah dengan Penghias
Apabila @property decorator digunakan pada fungsi, ia mengembalikan objek deskriptor dan memberikannya kepada nama harta. Objek ini mengekalkan fungsi pemeroleh fungsi asal dan termasuk dua fungsi tambahan yang mewakilkan kepada kaedah penetap dan pemadam harta itu.
Sebagai contoh:
class C: def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x
Kod di atas mencipta harta bernama "x" yang boleh mendapatkan semula nilai diri._x tanpa sebarang objek harta yang jelas. Fungsi getter dicipta secara automatik oleh penghias.
Penetap dan Penghias Penghapus
Untuk menambah kaedah penetap dan pemadam, cuma tambahkan .setter dan .deleter pada @property objek deskriptor, melepasi fungsi yang anda inginkan:
@x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x
Dengan menggunakan kaedah ini, anda boleh laksanakan gelagat tersuai untuk menetapkan dan memadamkan nilai sifat.
Butiran Pelaksanaan
Sintaks @decorator untuk @property ialah gula sintaksis. Di sebalik tabir, kod berikut dilaksanakan:
def x(self): return self._x x = property(x)
Contoh Deskriptor
Berikut ialah contoh bagaimana pelaksanaan Python tulen bagi deskriptor harta akan berfungsi:
class Property: def __init__(self, fget=None, fset=None, fdel=None, doc=None): self.fget = fget self.fset = fset self.fdel = fdel self.__doc__ = doc def __get__(self, obj, objtype=None): if obj is None: return self if self.fget is None: raise AttributeError("unreadable attribute") return self.fget(obj)
Kelas ini membolehkan anda membuat sifat secara manual dengan pengambil, penetap dan pemadam fungsi.
Atas ialah kandungan terperinci Bagaimanakah Penghias @property Python berfungsi untuk Mencipta Hartanah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!