Goswin hat geschrieben:Soweit ich Python bisher verstanden habe, ist der Ausdruck "K.foo(oK)" mehrdeutig,
Wie kommst du darauf?
Da steht "nimm das Attribut 'foo' von 'K' und rufe es mit dem Parameter 'oK' auf". Hier kommt evtl Die Reihenfolge ins Spiel, wie Python nach Attributen/Methoden sucht - das hat aber höchstens mit der (den)
Elternklasse(n), aber
nicht mit der
Metaklasse zu tun. und bei "suchen", genauer: beim "nachschlagen" (engl. "look up") nimmt Python den ersten Treffer (vgl.: die Reihenfolge bei mehreren Elternklassen "class Foo(Bar, Baz, Boom, etc, pp):").
Goswin hat geschrieben:Ich versuche ganz einfach herauszufinden, wie der Ausdruck "K.foo(oK)" im obigen Kontext von Python ausgelegt wird.Anders gesagt, aufgrund von welchen Überlegungen kann ich voraussagen, dass das obige Programm "ungebunden" und nicht etwa "gebunden" ausgibt?
Deine Bezeichungen "gebunden" bzw. "ungebunden" sind hier sehr ungünstig gewählt, weil Python die englischen Worte dafür ein bisschen anders verwendet
(s. Paste).
Allerdings
ist der Ausdruck eindeutig - Mehrdeutigkeit ist ja normalerweise ein Fehler - dein Code wird
nie "gebunden" ausgeben, weil Attribute von Instanzen
nie in der
Metaklasse gesucht werden.
Und ich denke nicht, dass ein tiefes Verständnis von Metaklassen zum normalen Pythonwissen gehört
Ich halte es da mit
Tim Peters hat geschrieben: "Metaclasses are deeper magic than 99% of users should ever worry about. If you wonder whether you need them, you don't."
—Tim Peters
"[...]wenn du dich fragst, ob du [Metaklassen] brauchst, brauchst du sie nicht"
hth, Jörg