Eigenschaften

Objektorientierte Programmierung in Python

Alex Yarosh

Content Quality Analyst @ DataCamp

Attributwerte ändern

class Mitarbeiter:
  def setze_name(self, name):
    self.name = name 
  def setze_gehalt(self, gehalt):
    self.gehalt = gehalt 
  def gebe_erhöhung(self, betrag):
    self.gehalt = self.gehalt + betrag

def __init__(self, name, gehalt): self.name, self.gehalt = name, gehalt
mitarbeiter = Mitarbeiter("Miriam Azari", 35000)
# Punktnotation und = verwenden, um Attribute zu ändern
mitarbeiter.gehalt = mitarbeiter.gehalt + 5000
Objektorientierte Programmierung in Python

Attributwerte ändern

class Mitarbeiter:
  def setze_name(self, name):
    self.name = name 
  def setze_gehalt(self, gehalt):
    self.gehalt = gehalt 
  def gebe_erhöhung(self, betrag):
    self.gehalt = self.gehalt + betrag

def __init__(self, name, gehalt): self.name, self.gehalt = name, gehalt
mitarbeiter = Mitarbeiter("Miriam Azari", 35000)
# Punktnotation und = verwenden, um Attribute zu ändern
mitarbeiter.gehalt = mitarbeiter.gehalt + 5000

 

 

Attributzugriff kontrollieren?

  • Wert auf Gültigkeit prüfen
  • oder Attribute schreibgeschützt machen
    • Änderung von setze_gehalt() verhindert nicht mitarbeiter.gehalt = -100
Objektorientierte Programmierung in Python

Eingeschränkte und schreibgeschützte Attribute

import pandas as pd
df = pd.DataFrame({"colA": [1,2], "colB":[3,4]})
df
  colA colB
0    1    3
1    2    4
df.columns = ["neue_colA", "neue_colB"]
df
  neue_colA  neue_colB
0    1    3
1    2    4
# wird einen Fehler verursachen
df.columns = ["neue_colA", "neue_colB", "extra"]
df
ValueError: Längenunterschied: 
Erwartete Achse hat 2 Elemente, 
neue Werte haben 3 Elemente
df.shape = (43, 27)
df
AttributeError: Attribut kann nicht gesetzt werden
Objektorientierte Programmierung in Python

@property

class Arbeitgeber:
  def __init__(self, name, neues_gehalt):
     self._gehalt = neues_gehalt


@property def gehalt(self): return self._gehalt
@gehalt.setter def gehalt(self, neues_gehalt):
if neues_gehalt < 0: raise ValueError("Ungültiges Gehalt") self._gehalt = neues_gehalt

 

← Verwende "geschütztes" Attribut mit führendem _ zur Datenspeicherung

← Verwende @property auf einer Methode, deren Name genau dem des eingeschränkten Attributs entspricht; gibt das interne Attribut zurück

← Verwende @attr.setter auf einer Methode attr(), die bei obj.attr = wert aufgerufen wird

  • der zuzuweisende Wert wird als Argument übergeben
Objektorientierte Programmierung in Python

@property

class Arbeitgeber:
  def __init__(self, name, neues_gehalt):
     self._gehalt = neues_gehalt


@property def gehalt(self): return self._gehalt
@gehalt.setter def gehalt(self, neues_gehalt): if neues_gehalt < 0: raise ValueError("Ungültiges Gehalt") self._gehalt = neues_gehalt
mitarbeiter = Mitarbeiter("Miriam Azari", 35000)
# Zugriff auf die "Eigenschaft"
mitarbeiter.gehalt
35000
mitarbeiter.gehalt = 60000 # <-- @gehalt.setter
mitarbeiter.gehalt = -1000
ValueError: Ungültiges Gehalt
Objektorientierte Programmierung in Python

Warum @property?

  $$\text{\Large{Benutzer: wie Attribute}}$$

 

$$\text{\Large{Entwickler: Zugriffskontrolle}}$$

Objektorientierte Programmierung in Python

Weitere Möglichkeiten

→ Kein @attr.setter hinzufügen

Erstelle eine schreibgeschützte Eigenschaft

→ Füge @attr.getter hinzu

Für die Methode, die aufgerufen wird, wenn der Wert der Eigenschaft abgerufen wird

→ Füge @attr.deleter hinzu

Für die Methode, die aufgerufen wird, wenn die Eigenschaft mit del gelöscht wird

Objektorientierte Programmierung in Python

Lass uns üben!

Objektorientierte Programmierung in Python

Preparing Video For Download...