jerch hat geschrieben:Fraglich ist noch, ob das Verhalten nur für direkte Typnachfolger von Metaklassen oder für Klassentypen generell gilt.
...
Habs mal kurz getestet, scheint tatsächlich generell für Klassentypen zu gelten.
EyDu hat geschrieben:Hier wird gar nichts unterschiedlich behandelt. Erst werden die Attribute im Objekt gesucht, dann in den Klassen entsprechend der Vererbungshierarchie.
Ich würde jetzt im Nachhinein auch sagen, das Verhalten gilt ganz allgemein, und je länger ich darüber nachdenke, desto logischer kommt es mir vor. Ein ganz einfaches Beispiel (ohne Metaklassen) wäre:
Code: Alles auswählen
class K(object):
foo = lambda oK,verwirf: "Klassenfunktion"
#
oK = K()
oK.foo = lambda verwirf: "Objektfunktion"
#"Objektsuche VOR Klassensuche:
print oK.foo(None) #druckt "Objektfunktion" aus
Code: Alles auswählen
class mK(type):
foo = lambda K,verwirf: "Klassenfunktion"
#
class K(object):
__metaclass__ = mK
foo = lambda verwirf: "Objektfunktion"
#
oK = K()
#"Objektsuche VOR Klassensuche:
print K.foo(oK) #druckt "Objektfunktion" aus