Python Class Variables bieten eine struk­tu­rier­te Mög­lich­keit, Daten zwischen ver­schie­de­nen Instanzen einer Klasse zu teilen. Zudem wirken sich Än­de­run­gen an einer Klas­sen­va­ria­ble direkt auf alle Instanzen der Klasse aus. Dadurch ersparst du dir die Neu­de­fi­ni­ti­on bei jeder In­stan­zi­ie­rung.

Was sind Python Class Variables?

In Python legst du Class Variables innerhalb einer Klasse fest. Im Gegensatz zu In­stanz­va­ria­blen, die in­di­vi­du­ell für jede Instanz gelten, behalten Klas­sen­va­ria­blen denselben Wert für alle Instanzen bei. Diese Variablen werden nor­ma­ler­wei­se vor dem Kon­struk­tor definiert und sind für sämtliche Instanzen der Klasse er­reich­bar.

Python Class Variables kommen oft zum Einsatz, um In­for­ma­tio­nen zu speichern, die für alle Instanzen einer Klasse identisch sind – etwa Kon­fi­gu­ra­ti­ons­wer­te, Standards oder ge­mein­sa­me Zustände innerhalb einer Klas­sen­hier­ar­chie. Zudem kannst du Klas­sen­va­ria­blen nutzen, um Methoden oder Attribute zu de­fi­nie­ren, die von allen Instanzen geteilt werden, was die Struktur deines Codes deutlich ver­bes­sert.

So sieht die Syntax von Python Class Variables aus

Python Class Variables erstellst du innerhalb der Klas­sen­de­fi­ni­ti­on, jedoch außerhalb von Methoden.

class Car:
    total_cars = 0  # Class variable to track the total number of cars
    def __init__(self, brand, model):
        self.brand = brand  # Instance variable for the car brand
        self.model = model  # Instance variable for the car model
        Car.total_cars += 1  # Increment the total number of cars upon each instantiation
    def display_details(self):
        print(f"Brand: {self.brand}, Model: {self.model}")
# Creating instances of Car
car1 = Car("BMW", "X3")
car2 = Car("Audi", "A4")
# Accessing class variable and instance variables
print(f"Total number of cars: {Car.total_cars}")  # Output: 2
car1.display_details()  # Output: Brand: BMW, Model: X3
car2.display_details()  # Output: Brand: Audi, Model: A4
python

Innerhalb der Klasse Car de­fi­nie­ren wir die Klas­sen­va­ria­ble total_cars, um die Ge­samt­zahl der Autos mit­zu­zäh­len. Der Kon­struk­tor __init__ startet immer dann, wenn eine neue Instanz der Klasse erzeugt wird. Bei jeder In­stan­zi­ie­rung werden die In­stanz­va­ria­blen brand und model fest­ge­legt und die Klas­sen­va­ria­ble total_cars um 1 erhöht.

Mit dem Aufruf der Methode display_details() geben wir die Details der je­wei­li­gen Auto-Instanzen aus. In einem f-String, einer gängigen Python-String-Format-Methode, greifen wir auf die Klas­sen­va­ria­ble total_cars zu, um die aktuelle Anzahl aller er­stell­ten Autos an­zu­zei­gen.

An­wen­dungs­bei­spie­le für Python Class Variables

Damit du sicher mit Klas­sen­va­ria­blen in Python arbeitest, sind vor allem der Zugriff, die Mo­di­fi­ka­ti­on sowie die Vererbung wichtig.

Auf Klas­sen­va­ria­blen zugreifen

Du greifst auf Python Class Variables über den Klas­sen­na­men oder die Instanz zu, gefolgt von einem Punkt und dem Namen der Variable.

class MyClass:
    class_var = "This is a class variable"
# using class name to access class variable
print(MyClass.class_var)  # Output: This is a class variable
# using instance to access class variable
obj = MyClass()
print(obj.class_var)  # Output: This is a class variable
python

In Python stehen dir ver­schie­de­ne Wege offen, um Klas­sen­va­ria­blen abzurufen:

  • Im Kon­struk­tor: Die Variable lässt sich innerhalb des Kon­struk­tors entweder über das self-Keyword oder direkt über den Klas­sen­na­men aufrufen.
  • In In­stanz­me­tho­den: Der Zugriff erfolgt innerhalb von In­stanz­me­tho­den ebenfalls über self oder den Klas­sen­na­men.
  • Außerhalb der Klasse: Hier kannst du die Class Variable entweder über die Ob­jekt­re­fe­renz oder den Klas­sen­na­men an­spre­chen.

Klas­sen­va­ria­blen mo­di­fi­zie­ren

Python Class Variables kannst du direkt über den Klas­sen­na­men ändern. Falls jedoch eine In­stanz­va­ria­ble den gleichen Namen wie eine Klas­sen­va­ria­ble trägt und du versuchst, diese über die Instanz zu ändern, wird eine neue In­stanz­va­ria­ble erstellt – die ur­sprüng­li­che Klas­sen­va­ria­ble bleibt davon unberührt.

class MyClass:
    class_var = "Original class variable"
obj = MyClass()
print(obj.class_var)  # Output: Original class variable
MyClass.class_var = "Modified class variable"
print(obj.class_var)  # Output: Modified class variable
python

In diesem Beispiel über­schrei­ben wir die Klas­sen­va­ria­ble class_var, indem wir ihr über die Klasse MyClass einen neuen Wert geben. Diese Änderung wird au­to­ma­tisch für die Instanz obj wirksam.

Class Variables und Vererbung

Dank Vererbung können ab­ge­lei­te­te Klassen auf die Klas­sen­va­ria­blen der Ba­sis­klas­se zugreifen. So nutzt du vor­han­de­ne Daten, ohne sie erneut de­fi­nie­ren zu müssen.

class BaseClass:
    base_var = "Base variable"
class DerivedClass(BaseClass):
    pass
print(DerivedClass.base_var)  # Output: Base variable
python

Hier legen wir eine Ba­sis­klas­se BaseClass fest, welche die Klas­sen­va­ria­ble base_var enthält. Die ab­ge­lei­te­te Klasse DerivedClass erbt von BaseClass. Durch diese Vererbung kann DerivedClass pro­blem­los auf die Klas­sen­va­ria­ble base_var der Ba­sis­klas­se zugreifen.

Zum Hauptmenü