Eigenschappen

Objectgeoriënteerd programmeren in Python

Alex Yarosh

Content Quality Analyst @ DataCamp

Attributen wijzigen

class Werknemer:
  def set_naam(self, naam):
    self.naam = naam 
  def set_salaris(self, salaris):
    self.salaris = salaris 
  def geef_verhoging(self, bedrag):
    self.salaris = self.salaris + bedrag

def __init__(self, naam, salaris): self.naam, self.salaris = naam, salaris
emp = Werknemer("Miriam Azari", 35000)
# Gebruik puntnotatie en = om attributen te wijzigen
emp.salaris = emp.salaris + 5000
Objectgeoriënteerd programmeren in Python

Attributen wijzigen

class Werknemer:
  def set_naam(self, naam):
    self.naam = naam 
  def set_salaris(self, salaris):
    self.salaris = salaris 
  def geef_verhoging(self, bedrag):
    self.salaris = self.salaris + bedrag

def __init__(self, naam, salaris): self.naam, self.salaris = naam, salaris
emp = Werknemer("Miriam Azari", 35000)
# Gebruik puntnotatie en = om attributen te wijzigen
emp.salaris = emp.salaris + 5000

 

 

Toegang tot attributen controleren?

  • controleer de waarde op geldigheid
  • of maak attributen alleen-lezen
    • het wijzigen van set_salaris() voorkomt niet emp.salaris = -100
Objectgeoriënteerd programmeren in Python

Beperkte en alleen-lezen attributen

import pandas as pd
df = pd.DataFrame({"kolomA": [1,2], "kolomB":[3,4]})
df
  kolomA kolomB
0    1    3
1    2    4
df.columns = ["nieuwe_kolomA", "nieuwe_kolomB"]
df
  nieuwe_kolomA  nieuwe_kolomB
0    1    3
1    2    4
# zal een fout veroorzaken
df.columns = ["nieuwe_kolomA", "nieuwe_kolomB", "extra"]
df
ValueError: Lengte komt niet overeen: 
Verwachte as heeft 2 elementen, 
nieuwe waarden hebben 3 elementen
df.shape = (43, 27)
df
AttributeError: kan attribuut niet instellen
Objectgeoriënteerd programmeren in Python

@property

class Werkgever:
  def __init__(self, naam, nieuw_salaris):
     self._salaris = nieuw_salaris


@property def salaris(self): return self._salaris
@salaris.setter def salaris(self, nieuw_salaris):
if nieuw_salaris < 0: raise ValueError("Ongeldig salaris") self._salaris = nieuw_salaris

 

← Gebruik een "beschermd" attribuut met een voorloop _ om gegevens op te slaan

← Gebruik @property op een methode waarvan de naam precies de naam is van het beperkte attribuut; geef het interne attribuut terug

← Gebruik @attr.setter op een methode attr() die wordt aangeroepen bij obj.attr = waarde

  • de waarde om toe te wijzen wordt als argument doorgegeven
Objectgeoriënteerd programmeren in Python

@property

class Werkgever:
  def __init__(self, naam, nieuw_salaris):
     self._salaris = nieuw_salaris


@property def salaris(self): return self._salaris
@salaris.setter def salaris(self, nieuw_salaris): if nieuw_salaris < 0: raise ValueError("Ongeldig salaris") self._salaris = nieuw_salaris
emp = Werknemer("Miriam Azari", 35000)
# toegang tot de "eigenschap"
emp.salaris
35000
emp.salaris = 60000 # <-- @salaris.setter
emp.salaris = -1000
ValueError: Ongeldig salaris
Objectgeoriënteerd programmeren in Python

Waarom @property gebruiken?

  $$\text{\Large{Gebruiker: gedraagt zich als attributen}}$$

 

$$\text{\Large{Ontwikkelaar: controle over toegang}}$$

Objectgeoriënteerd programmeren in Python

Andere mogelijkheden

→ Voeg geen @attr.setter toe

Maak een alleen-lezen eigenschap

→ Voeg @attr.getter toe

Gebruik voor de methode die wordt aangeroepen wanneer de waarde van de eigenschap wordt opgevraagd

→ Voeg @attr.deleter toe

Gebruik voor de methode die wordt aangeroepen wanneer de eigenschap wordt verwijderd met del

Objectgeoriënteerd programmeren in Python

Laten we oefenen!

Objectgeoriënteerd programmeren in Python

Preparing Video For Download...