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
staticsind Klassenmethoden — Aufruf über den Klassennamen (Math.max(...)), keinthisverfügbar. Im Glossar sind sie als statische Methode beschrieben. - Python:
@classmethodist eine eigene Variante: Die Methode erhält als ersten Parametercls— die Klasse selbst, auch wenn sie über eine Unterklasse aufgerufen wird.@staticmethoderhä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
clsautomatisch 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.