Ich habe versucht, über Metaklassen in Python zu lernen. Ich habe die Hauptidee, aber ich kann den Mechanismus nicht aktivieren. Wie ich es verstehe, können Sie M als Metaklasse angeben, wenn Sie eine Klasse K konstruieren, indem Sie 0 auf globaler Ebene oder auf Klassenebene auf M setzen (__metaclass__
). Um dies zu testen aus, schrieb ich das folgende Programm:Sollte nicht __metaclass__ die Verwendung einer Metaklasse in Python erzwingen?
p = print
class M(type):
def __init__(*args):
type.__init__(*args)
print("The rain in Spain")
p(1)
class ClassMeta:
__metaclass__ = M
p(2)
__metaclass__ = M
class GlobalMeta: pass
p(3)
M('NotMeta2',(), {})
p(4)
Allerdings, wenn ich es laufen lasse, erhalte ich die folgende Ausgabe:
C:\Documents and Settings\Daniel Wong\Desktop>python --version Python 3.0.1 C:\Documents and Settings\Daniel Wong\Desktop>python meta.py 1 2 3 The rain in Spain 4
Sollte ich nicht sehen „Die regen in Spanien“ nach 1 und 2? Was ist denn hier los?
Das doppelte Negativ "nicht ... nicht erzwingen" ist schwer zu analysieren. Könnten Sie bitte die Frage klären? –
Danke für die Rückmeldung. Ich denke, es sollte jetzt einfacher zu verstehen sein. – allyourcode