Konstruksi properti () mengembalikan atribut properti.
Sintaksnya property()
adalah:
properti (fget = Tidak Ada, fset = Tidak Ada, fdel = Tidak Ada, doc = Tidak Ada)
Bacaan yang Direkomendasikan: Python @property: Bagaimana Cara Menggunakannya dan Mengapa?
property () Parameter
The property()
mengambil empat parameter opsional:
- fget (opsional) - Fungsi untuk mendapatkan nilai atribut. Default-nya adalah
None
. - fset (opsional) - Fungsi untuk mengatur nilai atribut. Default-nya adalah
None
. - fdel (opsional) - Fungsi untuk menghapus nilai atribut. Default-nya adalah
None
. - doc (opsional) - String yang berisi dokumentasi (docstring) untuk atributnya. Default-nya adalah
None
.
Nilai pengembalian dari properti ()
property()
mengembalikan atribut properti dari pengambil, penyetel, dan penghapus yang diberikan.
- Jika tidak ada argumen yang diberikan,
property()
mengembalikan atribut properti dasar yang tidak berisi getter, setter, atau deleter. - Jika doc tidak tersedia,
property()
ambil docstring dari fungsi pengambil.
Contoh 1: Buat atribut dengan getter, setter, dan deleter
class Person: def __init__(self, name): self._name = name def get_name(self): print('Getting name') return self._name def set_name(self, value): print('Setting name to ' + value) self._name = value def del_name(self): print('Deleting name') del self._name # Set property to use get_name, set_name # and del_name methods name = property(get_name, set_name, del_name, 'Name property') p = Person('Adam') print(p.name) p.name = 'John' del p.name
Keluaran
Getting name Namanya adalah: Adam Setting name to John Menghapus nama
Di sini, _name digunakan sebagai variabel privat untuk menyimpan nama Person.
Kami juga mengatur:
- metode pengambil
get_name()
untuk mendapatkan nama orang tersebut, - metode penyetel
set_name()
untuk mengatur nama orang, - metode deleter
del_name()
untuk menghapus nama orang tersebut.
Sekarang, kami menetapkan nama atribut properti baru dengan memanggil property()
metode tersebut.
Seperti yang ditunjukkan dalam program, merujuk secara p.name
internal panggilan get_name()
sebagai getter, set_name()
sebagai penyetel dan del_name()
sebagai penghapus melalui keluaran tercetak yang ada di dalam metode.
Contoh 2: Menggunakan @property decorator
Alih-alih menggunakan property()
, Anda dapat menggunakan dekorator Python @property
untuk menetapkan pengambil, penyetel, dan penghapus.
class Person: def __init__(self, name): self._name = name @property def name(self): print('Getting name') return self._name @name.setter def name(self, value): print('Setting name to ' + value) self._name = value @name.deleter def name(self): print('Deleting name') del self._name p = Person('Adam') print('The name is:', p.name) p.name = 'John' del p.name
Keluaran
Getting name Namanya adalah: Adam Setting name to John Menghapus nama
Di sini, alih-alih menggunakan property()
, kami menggunakan @property
dekorator.
Pertama, kami menetapkan bahwa name()
metode juga merupakan atribut dari Orang. Ini dilakukan dengan menggunakan @property
metode sebelum pengambil seperti yang ditunjukkan dalam program.
Selanjutnya, kami menggunakan nama atribut untuk menentukan penyetel dan penghapus.
Ini dilakukan dengan menggunakan @name.setter
untuk metode penyetel dan @name.deleter
untuk metode deleter.
Perhatikan, kita telah menggunakan metode yang sama name()
dengan definisi berbeda untuk mendefinisikan getter, setter, dan deleter.
Sekarang, setiap kali kita menggunakannya p.name
, secara internal memanggil getter, setter, dan deleter yang sesuai seperti yang ditunjukkan oleh output tercetak yang ada di dalam metode.