Klassen- vs. Instanzattribute

Einführung in objektorientierte Programmierung in Python

George Boorman

Curriculum Manager, DataCamp

Grundprinzipien der OOP

Kapselung:

  • Daten und Methoden bündeln

Vererbung:

  • Vorhandene Funktionalität erweitern

Polymorphie:

  • Einheitliche Schnittstelle schaffen
Einführung in objektorientierte Programmierung in Python

Instanzattribute

class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

emp1 = Employee("Teo Mille", 50000) 
emp2 = Employee("Marta Popov", 65000)
  • name und salary sind für jedes Objekt spezifisch
  • self weist dem Objekt zu
Einführung in objektorientierte Programmierung in Python

Klassenattribute

  • Daten, die alle Instanzen einer Klasse teilen

 

  • Klassenattribute im class-Rumpf definieren

 

  • „Globale Variable“ innerhalb der Klasse
Einführung in objektorientierte Programmierung in Python

Klassenattribute implementieren

class Employee:
    # Define a class attribute
    # No self. syntax
    MIN_SALARY = 30000 

def __init__(self, name, salary): self.name = name # Use class name # to access class attribute if salary >= Employee.MIN_SALARY: self.salary = salary
else: self.salary = Employee.MIN_SALARY
  • MIN_SALARY wird von allen Instanzen geteilt
  • self nicht zum Definieren von Klassenattributen verwenden
  • Üblich ist Großschreibung
  • Mit ClassName.ATTR_NAME auf den Klassenattributwert zugreifen
Einführung in objektorientierte Programmierung in Python

Klassenattribute

class Employee:
    # Define a class attribute
    MIN_SALARY = 30000    

def __init__(self, name, salary): self.name = name # Use class name # to access class attribute if salary >= Employee.MIN_SALARY: self.salary = salary else: self.salary = Employee.MIN_SALARY
emp1 = Employee("John", 40000)
print(emp1.MIN_SALARY)
30000
emp2 = Employee("Jane", 60000)
print(emp2.MIN_SALARY)
30000
Einführung in objektorientierte Programmierung in Python

Klassenattribute ändern

emp1 = Employee("John", 40000)
emp2 = Employee("Jane", 60000)

# Update MIN_SALARY of emp1 emp1.MIN_SALARY = 50000
# Print MIN_SALARY for both employees print(emp1.MIN_SALARY) print(emp2.MIN_SALARY)
50000
30000
Einführung in objektorientierte Programmierung in Python

Klassenattribute ändern

  • MIN_SALARY wird in der Klassendefinition erstellt

 

  • Das Aktualisieren von MIN_SALARY an einem Objekt ändert den Klassenwert nicht

 

  • Sicherheit – verhindert Änderungen an der Software!
Einführung in objektorientierte Programmierung in Python

Warum Klassenattribute?

Globale Konstanten zur Klasse

 

  • Mindest- und Höchstwerte für Attribute
    • Ungültige Daten verhindern
  • Häufig genutzte Werte/Konstanten, z. B. host, port für eine Database-Klasse
    • Wiederholung beim Erstellen von Objekten vermeiden
Einführung in objektorientierte Programmierung in Python

Lass uns üben!

Einführung in objektorientierte Programmierung in Python

Preparing Video For Download...