Objectgeoriënteerd programmeren in Python
Alex Yarosh
Content Quality Analyst @ DataCamp
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 + bedragdef __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
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 + bedragdef __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
set_salaris() voorkomt niet emp.salaris = -100import 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
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
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
$$\text{\Large{Gebruiker: gedraagt zich als attributen}}$$
$$\text{\Large{Ontwikkelaar: controle over toegang}}$$
→ 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