helduel hat geschrieben:Nur, es geht um die Frage, ob man es nicht weglassen könnte und da muss man sagen: Natürlich ginge das. Andere Sprachen können das ja auch.
Das sagt genau gar nichts aus. Es geht ja nicht darum, ob man die Referenz auf das Objekt selbst in anderen Sprachen implizieren kann, sondern ob das in Python möglich ist. Sicherlich kommen andere Sprachen wie C++ ohne eine explizite Angabe dieser Referenz aus. Dies allerdings auf Python zu übertragen und als Argument für die technische Möglichkeit anzuwenden, setzt voraus, dass diese Sprachen in ihrem Objektmodell Python gleichen.
Das ist aber definitiv nicht der Fall. C++ beispielsweise kommt zwar ohne explizites "this" aus, allerdings sind Funktionen und Methoden in C++ auch etwas fundamental verschiedenes. Auch kennt C++ keine Dekoratoren oder Methodenreferenzen. Daher treten die Probleme der Implikation, die bei Python immanent sind, unter C++ überhaupt nicht auf, weil die Sprache dies durch ihre Definition verhindert.
Bei Python ginge das aber mit tiefgreifenden Änderungen (Compiler, Bibliotheken) einher
Es ginge auch und vor allem mit größeren Änderungen am Objektmodell und der Sprachspezifikation einher, da man bei den erwähnten Problemfällen (vor allem bei Dekoratoren) genau definieren müsste, wann eine Methode oder Funktion eine implizite Referenz erhält. Man kann ja beispielsweise Funktionen einfach als Dekoratoren verwenden, genauso wie man Methoden außerhalb der Klassendeklaration ersetzen kann. Die daraus resultierenden Regeln wären mit Sicherheit komplex und stünden den Prinzipien von Python somit entgegen.
I reject hacks like special-casing '@classmethod' and '@staticmethod'.
Ob eine Funktion im Kontext einer Klasse (implizites cls innerhalb der Funktion) oder im Kontext einer Instanz (implizites self innerhalb der Funktion) aufgerufen wurde - die Info wäre da (wenn auch nicht zur Compile-Zeit) und könnte ausgewertet werden.
Wenn diese Information zur Laufzeit ausgewertet würde, stellt sich die Frage, was passiert, wenn keine Klassenmethode im Kontext einer Instanz aufgerufen wird.
Das technische Geblubber mag momentan relevant sein, weil man die Technik nicht von heute auf morgen ändern kann, aber auf Dauer gesehen, könnte man die in den Griff kriegen.
Ohne Änderungen am Objektmodell ist das nicht so einfach. Natürlich kann man das Objektmodell ändern – das von Java kommt ja auch ohne explizites self aus