Python Academy · Les

De decorator @property

Gebruik property voor getters, setters en deleters.

Les 3 van 414 stappen

De decorator @property is een gratis Python Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Python Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Python Academy bevat in totaal 4 lessen.

Inleiding

@property verandert een methode in een leesbaar attribuut. @setter en @deleter maken het patroon voor gecontroleerde toegang compleet.

Waarom @property?

In plaats van de Java-stijl getX()/setX() gebruikt Python @property. De toegang ziet eruit als die tot een attribuut: obj.value, niet 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 ()

Berekende properties

Methoden met @property berekenen hun waarde direct. obj.area wordt telkens opnieuw berekend wanneer je het opent — opslaan is niet nodig.
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 voor een property

@property_name.setter voegt een setter toe. Nu roept c.radius = 10 de settermethode aan.
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)

Deleter voor een property

@property_name.deleter verwerkt del obj.attr. Gebruik dit voor opruimlogica.
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'))

Alleen-lezen-property

Definieer alleen de getter, zonder setter. Als je probeert een waarde toe te wijzen, wordt AttributeError opgewekt.
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)

Property met validatie

Setters zijn de ideale plek om gegevens te valideren — controleer het type, bereik of formaat voordat je de gegevens opslaat.
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)

Cachen met property

Combineer @property met een gecachte waarde om de waarde één keer te berekenen en te memoizen.
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 berekent de property één keer en slaat deze op als instantieattribuut — er zijn geen herhaalde berekeningen nodig.
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 versus __slots__

__slots__ voorkomt het aanmaken van willekeurige attributen en bespaart geheugen. Properties voegen logica toe. Ze vullen elkaar aan.
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)

Wanneer gebruik je @property?

Gebruik @property wanneer je validatie of berekende waarden nodig hebt, of interne implementatiedetails wilt wijzigen zonder de achterwaartse compatibiliteit te verbreken.
# 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)

Snelle controle

Wat gebeurt er wanneer je probeert een waarde toe te wijzen aan een alleen-lezen-@property waarvoor geen setter is gedefinieerd?

Samenvatting

@property: de getter wordt toegang tot een attribuut. @name.setter voegt ondersteuning voor schrijven toe. @name.deleter voegt ondersteuning voor del toe. @cached_property berekent één keer. Setters zijn bedoeld voor validatie.

Ga door

Uitstekende voortgang! Ga door om het volgende concept onder de knie te krijgen.
Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
76
Lessen
320

Veelgestelde vragen

Is de les “De decorator @property” gratis?

Ja — de volledige tekst van “De decorator @property” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Python Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Python Academy bevat in totaal 4 lessen.

Wat leer ik in “De decorator @property”?

Gebruik property voor getters, setters en deleters. Je oefent met Python Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Python Academy te beginnen?

Ervaring vooraf is niet nodig. Python Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “De decorator @property”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Python Academy?

Ja. Elke les over Python Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Functies als first-classobjecten
  2. Aangepaste decorators schrijven
  3. De decorator @property
  4. @classmethod en @staticmethod
← Terug naar Python Academy