Ich habe jetzt lange darüber "sinniert", was Sinn und Zweck von staticmethod und classmethod sein soll. Mit Hilfe von
stackoverflow.com bin ich auf das Beispiel von dict.fromkeys gestoßen, das eine classmethod darstellt. Nach endlosem Auf-dem-Schlauch-stehen verstehe ich jetzt glaube ich auch, was dort gemeint ist. Der Sinn der Klassenmethode ist dort, dass ich eben dict.fromkeys schreiben kann (anstatt dict().foo() für eine Instanzmethode), also nur unter Nennung des Klassennamens eine Art alternativen Konstruktor aufrufe (und eben nicht auf einer Instanz der Klasse). Und verstehe ich das jetzt richtig, dass in diesem Falle dictfromkeys keine staticmethod sein könnte, denn dann wüsste sie nicht, was für ein Objekt sie im Falle von Vererbung zurückgeben soll?
Code: Alles auswählen
class DictSubclass(dict):
pass
DictSubclass.fromkeys('abc')
Dort soll ja ein Wörterbuch vom Typ 'DictSubclass' erstellt werden - wäre fromkeys eine staticmethod, dann wäre das nicht möglich, da fromkeys nicht wüsste, auf welcher Klasse es aufgerufen wurde. Richtig?
Aber wozu braucht man denn dann eine staticmethod? In dem oben verlinkten Beitrag steht sie sei mehr oder weniger nutzlos. Aber warum gibt es sie denn dann, da muss doch zumindest irgendwo irgendein Vorteil vorhanden sein?