0Pricing
Python Academy · Pelajaran

Decorator @property

Gunakan property untuk getter, setter, dan deleter.

Decorator @property adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.

Pendahuluan

@property mengubah metode menjadi atribut yang dapat dibaca. @setter dan @deleter melengkapi pola akses terkendali.

Mengapa @property?

Alih-alih menggunakan gaya Java getX()/setX(), Python menggunakan @property. Aksesnya tampak seperti atribut: obj.value, bukan obj.get_value().
class Circle:
    def __init__(self, r): self._r = r
    @property
    def radius(self): return self._r
c = Circle(5)
print(c.radius)  # no ()

Properti Terhitung

Metode @property menghitung nilai saat diperlukan. obj.area menghitung ulang setiap kali diakses—tidak diperlukan nilai yang disimpan.
import math
class Circle:
    def __init__(self, r): self._r = r
    @property
    def area(self): return math.pi * self._r**2
c = Circle(5)
print(round(c.area, 2))

Setter Properti

@property_name.setter menambahkan setter. Sekarang c.radius = 10 akan memanggil metode setter.
class Circle:
    def __init__(self, r): self._r = r
    @property
    def radius(self): return self._r
    @radius.setter
    def radius(self, val):
        if val <= 0: raise ValueError('radius must be positive')
        self._r = val
c = Circle(5)
c.radius = 10
print(c.radius)

Penghapus Properti

@property_name.deleter menangani del obj.attr. Gunakan ini untuk logika pembersihan.
class User:
    def __init__(self, name): self._name = name
    @property
    def name(self): return self._name
    @name.deleter
    def name(self): del self._name
u = User('Alice')
del u.name
print(hasattr(u, '_name'))

Properti Hanya-Baca

Definisikan hanya getter, tanpa setter. Upaya untuk menetapkan nilai akan memunculkan AttributeError.
class Const:
    def __init__(self, v): self._v = v
    @property
    def value(self): return self._v
c = Const(42)
print(c.value)
try: c.value = 99
except AttributeError as e: print(e)

Properti dengan Validasi

Setter adalah tempat yang tepat untuk memvalidasi data—periksa tipe, rentang, atau format sebelum menyimpannya.
class BoundedInt:
    def __init__(self, lo, hi): self.lo,self.hi=lo,hi; self._v=lo
    @property
    def value(self): return self._v
    @value.setter
    def value(self, v):
        if not self.lo <= v <= self.hi:
            raise ValueError(f'{v} out of [{self.lo},{self.hi}]')
        self._v = v
b = BoundedInt(0, 10)
b.value = 5
print(b.value)

Caching dengan property

Gabungkan @property dengan nilai yang disimpan dalam tembolok agar perhitungan dilakukan sekali dan hasilnya dimemoisasi.
class Expensive:
    _cache = None
    @property
    def result(self):
        if self._cache is None:
            self._cache = sum(range(1000))
        return self._cache
e = Expensive()
print(e.result)
print(e.result)

cached_property (Python 3.8+)

@functools.cached_property menghitung properti sekali dan menyimpannya sebagai atribut instance—tanpa perhitungan berulang.
from functools import cached_property
import math
class Circle:
    def __init__(self, r): self.r = r
    @cached_property
    def area(self): return math.pi * self.r**2
c = Circle(5)
print(round(c.area, 2))

Property vs __slots__

__slots__ mencegah pembuatan atribut sembarang dan menghemat memori. Properti menambahkan logika. Keduanya saling melengkapi.
class Point:
    __slots__ = ('_x', '_y')
    def __init__(self, x, y): self._x,self._y=x,y
    @property
    def x(self): return self._x
p = Point(1, 2)
print(p.x)

Kapan Menggunakan @property

Gunakan @property ketika Anda memerlukan validasi, nilai terhitung, atau ingin mempertahankan kompatibilitas mundur saat mengubah bagian internal.
# Before: class Person:
#     def __init__(self, age): self.age = age
# After: add validation without changing caller code
class Person:
    def __init__(self, age): self.age = age
    @property
    def age(self): return self._age
    @age.setter
    def age(self, v):
        if v < 0: raise ValueError('negative age')
        self._age = v
p = Person(30)
print(p.age)

Pemeriksaan Singkat

Apa yang terjadi saat Anda mencoba menetapkan nilai ke @property hanya-baca (tanpa setter yang didefinisikan)?

Ringkasan

@property: getter menjadi akses atribut. @name.setter menambahkan dukungan penulisan. @name.deleter menambahkan dukungan del. @cached_property menghitung sekali. Setter digunakan untuk validasi.

Lanjutkan

Kemajuan Anda sangat baik! Lanjutkan untuk menguasai konsep berikutnya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Decorator @property” gratis?

Ya — teks lengkap “Decorator @property” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Decorator @property”?

Gunakan property untuk getter, setter, dan deleter. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Python Academy?

Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Decorator @property” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Fungsi sebagai Objek Kelas Satu
  2. Menulis Decorator Kustom
  3. Decorator @property
  4. @classmethod dan @staticmethod
← Kembali ke Python Academy