Eine Klassenmethode ist eine Methode, die an die Klasse gebunden ist und nicht an ein einzelnes Objekt. Sie wird über den Klassennamen aufgerufen, hat keinen Zugriff auf den Zustand einer konkreten Instanz — dafür aber auf die Klasse selbst und ihre Klassenvariablen.

Abgrenzung: Klassenmethode vs. statische Methode

Die Begriffe überlappen sprachabhängig:

  • Java, C++, C#: Methoden mit dem Schlüsselwort static sind Klassenmethoden — Aufruf über den Klassennamen (Math.max(...)), kein this verfügbar. Im Glossar sind sie als statische Methode beschrieben.
  • Python: @classmethod ist eine eigene Variante: Die Methode erhält als ersten Parameter cls — die Klasse selbst, auch wenn sie über eine Unterklasse aufgerufen wird. @staticmethod erhält dagegen überhaupt keinen impliziten Parameter.
class Zaehler:
    anzahl = 0                       # Klassenvariable

    @classmethod
    def erhoehen(cls):
        cls.anzahl += 1              # Zugriff auf die KLASSE, nicht auf self

    @staticmethod
    def hilfe():
        return "Nur eine Hilfsfunktion, ohne Klassenbezug"

Was eine Klassenmethode darf

  • Klassenvariablen lesen und verändern (Zähler, gemeinsame Konfiguration).
  • Alternativ-Konstruktoren als Factory anbieten, z. B. VonDatumsstring.parse(text) — sie erzeugt ein Objekt und bleibt dabei vererbungsfreundlich: cls(...) statt hartkodierter Klassenname.
  • In Unterklassen nutzt cls automatisch die tatsächlich aufgerufene Unterklasse — anders als ein hartkodierter Klassenname.

Gegenüberstellung

Instanzmethode:  obj.methode()   -> kennt self (Zustand des Objekts)
Klassenmethode:  Klasse.m()      -> kennt cls  (Zustand der Klasse)
statische Meth.: Klasse.m()      -> kennt weder self noch cls

Der Konstruktor einer Klasse ist übrigens selbst eine besondere Instanzmethode — er wird beim new auf der Klasse ausgelöst und initialisiert das neue Objekt.

Verwandte Grundlagen: Klasse, Objekt, statische Methode, Klassenvariable, this/self, Sichtbarkeit, Getter/Setter.