Satu jenis penghias ialah pemeroleh dan penetap harta. Penghias ini membenarkan akses terkawal kepada pembolehubah dalam keadaan kelas.
Pendapat dan penetap harta direka khusus untuk mengawal atribut dalam pengaturcaraan berorientasikan objek. Ini berbeza daripada penghias fungsi kerana ia digunakan untuk atribut kelas (lihat siaran saya tentang penghias fungsi di sini).
Kedua-dua penghias fungsi dan penghias pengambil dan penetap harta mengubah suai kod dengan kod boleh guna semula dan menggunakan sintaks '@'. Kedua-duanya menukar fungsi kod.
Baiklah, mari kita mulakan.
Pendapat dan penetap harta digunakan pada kaedah dalam kelas untuk mentakrifkan pelbagai gelagat. setter menetapkan atribut kepada nilai dan getter mengambil atribut daripada kelas. Atribut ialah tetapkan dahulu.
Mari kita lihat contoh, dan kemudian kita akan memecahkannya:
class Shoe: def __init__(self, brand = "Adidas", size = 9): self.brand = brand self.size = size self._condition = "New" @property def size(self): """The size property""" return self._size @size.setter def size(self, size): """size must be an integer""" if isinstance(size, int): self._size = size else: print("size must be an integer") def cobble(self): """Repairs the shoe and sets the condition to 'New'.""" self.condition = "New" print("Your shoe is as good as new!") @property def condition(self): """The condition property""" return self._condition @condition.setter def condition(self, condition): self._condition = condition
Mari kita lihat beberapa kod ini:
garis bawah sebelum beberapa atribut (keadaan, saiz) menunjukkan kepada pembangun bahawa ia adalah peribadi; ia khusus untuk setiap tika kelas Kasut (setiap kasut, huruf kecil).
Anda mungkin perasan bahawa keadaan dan saiz dibuat secara berbeza. self._condition = "Baru" bermaksud bahawa setiap contoh (atau objek) kelas kasut dijadikan instantiated dengan keadaan "Baru". Perkara yang sama dilakukan untuk atribut saiz, tetapi ia tidak ditulis sebagai diri._size = 9 supaya ia akan mencetuskan pengesahan sifat penetap, kerana saiz perlu menjadi integer (ini adalah proses yang dipanggil pengesahan). Kami menetapkan keadaan setiap objek kasut individu secara langsung, bukannya menjalankannya melalui kaedah penetap dan pengambil harta.
Kaedah cobble tidak memerlukan penghias kerana ia hanya melakukan tindakan, tidak mendapatkan/menetapkan atribut setiap objek kasut.
Mari kita lakukan satu perubahan terakhir pada kod kita. Sebagai contoh, bagaimana jika kita ingin memastikan atribut saiz tidak boleh diubah kemudian? Lagipun, kasut tidak berubah saiznya, bukan?
Kita boleh menggunakan fungsi hasattr() untuk melakukan pemeriksaan pada setiap objek kasut. Adakah ia mempunyai atribut saiz peribadi, yang ditunjukkan oleh kehadiran '_size'? Jika ya, ia tidak boleh diubah. Berikut ialah kod yang dilaksanakan:
@size.setter def size(self, size): """size must be an integer and can't be changed once set""" if hasattr(self, '_size'): raise AttributeError("Can't change size once set") if isinstance(size, int): self._size = size else: raise ValueError("size must be an integer")
Penetap dan pengambil hartanah agak mencabar untuk difahami, tetapi setelah difahami, anda akan mengekod Python seperti seorang profesional!
Sumber:
Bahan sekolah flatiron
Atas ialah kandungan terperinci Penghias dan Penetap dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!