Beispiel:
class MyClass: def instance_method(self): print(f"Instanz: {self}") @classmethod def class_method(cls): print(f"Klasse: {cls.__name__}") @staticmethod def static_method(): print("Einfach eine Funktion") obj = MyClass() obj.instance_method() # self — das ist obj MyClass.class_method() # cls — das ist MyClass MyClass.static_method() # kein self/cls
Häufige Frage:
Kann man eine Klassenmethode über eine Instanz aufrufen? Was unterscheidet sich vom Aufruf über die Klasse selbst?
Antwort: Ja, die Klassenmethode kann sowohl über eine Instanz als auch über die Klasse selbst aufgerufen werden. Es spielt keine Rolle, woher der Aufruf kommt — der erste Parameter ist immer die Klasse, nicht die Instanz. Bei einem Aufruf über die Instanz wird ihre Klasse als cls übergeben.
Geschichte
Im Projekt wurden alle Fabrikmethoden statisch gemacht (@staticmethod), aber innen musste man den Namen der Unterklasse wissen — das war nicht möglich. Wir haben es auf @classmethod umgestellt, um den cls-Verweis zu erhalten.
Geschichte
Für die Generierung einzigartiger IDs von Instanzen wurde eine normale Methode (self) verwendet, aber es hätte eine Klassenmethode sein müssen, da der Zähler für die Klasse gemeinsam und nicht für jedes Objekt sein sollte.
Geschichte
Der Entwickler hat Geschäftslogik, die nicht mit der Klasse verbunden ist, in eine statische Methode innerhalb der Klasse gelegt. Andere konnten diese Funktion nicht finden, da sie nicht erwarteten, dass sie im Namensraum einer anderen Klasse ist, was die Wartung erschwerte.