0Pricing
Python Academy · Lektion

@classmethod und @staticmethod

Definieren Sie Klassen- und statische Methoden mit geeigneten Decorators.

@classmethod und @staticmethod ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Einführung

@classmethod erhält die Klasse als erstes Argument. @staticmethod erhält kein spezielles Argument. Beide werden in der Klasse definiert.

Instanz vs. Klasse vs. statisch

Reguläre Methoden erhalten self. Klassenmethoden erhalten cls. Statische Methoden erhalten keines von beiden. Wählen Sie je nachdem, welche Daten Sie benötigen.
class Demo:
    def instance(self): return 'instance'
    @classmethod
    def class_m(cls): return f'class: {cls.__name__}'
    @staticmethod
    def static_m(): return 'static'
d = Demo()
print(d.instance())
print(Demo.class_m())
print(Demo.static_m())

@classmethod als Factory

Die häufigste Verwendung sind alternative Konstruktoren. Date.from_string('2024-01-15') statt der Analyse in __init__.
class Date:
    def __init__(self, y,m,d): self.y,self.m,self.d=y,m,d
    @classmethod
    def today(cls):
        from datetime import date
        d = date.today()
        return cls(d.year, d.month, d.day)
    def __repr__(self): return f'{self.y}-{self.m}-{self.d}'
print(Date.today())

@classmethod mit Vererbung

cls in einer Klassenmethode verweist auf die tatsächliche Unterklasse, nicht auf die Basisklasse. Dadurch funktionieren Factory-Methoden auch mit Unterklassen korrekt.
class Animal:
    @classmethod
    def create(cls, name):
        return cls(name)
    def __init__(self, name): self.name = name
class Dog(Animal): pass
d = Dog.create('Rex')
print(type(d).__name__, d.name)

@staticmethod für Hilfsfunktionen

Statische Methoden sind reguläre Funktionen, die logisch mit einer Klasse gruppiert sind. Sie können weder auf Klassen- noch auf Instanzdaten zugreifen.
class MathHelper:
    @staticmethod
    def clamp(value, lo, hi):
        return max(lo, min(hi, value))
print(MathHelper.clamp(15, 0, 10))
print(MathHelper.clamp(-5, 0, 10))

@staticmethod vs. Modul-Funktion

Wenn eine Funktion die Klasse nicht benötigt, könnte sie eine Funktion auf Modulebene sein. Verwenden Sie @staticmethod nur, wenn sie logisch zur Klasse gehört.
class Validator:
    @staticmethod
    def is_email(s): return '@' in s and '.' in s
print(Validator.is_email('user@example.com'))
print(Validator.is_email('not-an-email'))

Aufruf über eine Instanz

Sie können sowohl @classmethod als auch @staticmethod über Instanzen aufrufen, aber das Verhalten von cls bzw. des fehlenden ersten Arguments bleibt unverändert.
class C:
    @classmethod
    def who(cls): return cls.__name__
    @staticmethod
    def pi(): return 3.14
c = C()
print(c.who())
print(c.pi())

Klassenmethode für Singletons

classmethods können Singleton-Muster erzwingen, indem sie prüfen, ob bereits eine Instanz existiert.
class Singleton:
    _instance = None
    @classmethod
    def get(cls):
        if cls._instance is None:
            cls._instance = cls()
        return cls._instance
a = Singleton.get()
b = Singleton.get()
print(a is b)

Klassenmethoden überschreiben

Eine Unterklasse kann eine Klassenmethode überschreiben. cls ist dann die Unterklasse, wodurch die Polymorphie erhalten bleibt.
class Base:
    @classmethod
    def info(cls): return f'{cls.__name__} info'
class Child(Base): pass
print(Base.info())
print(Child.info())

Typprüfung mit cls

Innerhalb einer Klassenmethode ist cls die tatsächliche Klasse. Verwenden Sie cls(), um Instanzen zu erstellen – schreiben Sie den Klassennamen nicht fest vor.
class Shape:
    @classmethod
    def make(cls):
        return cls()  # NOT Shape()
class Square(Shape): pass
print(type(Square.make()).__name__)

Kombination mit @property

Ein zwischengespeicherter Wert auf Klassenebene kann @classmethod und ein Klassenattribut für klassenweites Caching kombinieren.
class Config:
    _data = None
    @classmethod
    def load(cls):
        if cls._data is None:
            cls._data = {'debug': True}
        return cls._data
print(Config.load())

Kurzer Test

Was ist cls in einer @classmethod?

Zusammenfassung

@classmethod erhält cls: Verwenden Sie es für Factorys, alternative Konstruktoren und Singletons. @staticmethod erhält nichts: Verwenden Sie es für Hilfsfunktionen. cls ist die tatsächliche (Unter-)Klasse.

Weiter so

Hervorragender Fortschritt! Fahren Sie fort, um das nächste Konzept zu meistern.

Häufig gestellte Fragen

Ist die Lektion „@classmethod und @staticmethod“ kostenlos?

Ja — der vollständige Text von „@classmethod und @staticmethod“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „@classmethod und @staticmethod“?

Definieren Sie Klassen- und statische Methoden mit geeigneten Decorators. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „@classmethod und @staticmethod“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Funktionen als Objekte erster Klasse
  2. Benutzerdefinierte Decorators schreiben
  3. Der @property-Decorator
  4. @classmethod und @staticmethod
← Zurück zu Python Academy