Warum in dem Code unten Metaklasse mit Objektbasis auslösen Metaklasse Konflikt Ausnahme?Warum erhöht Metaklasse mit Objektbasis den Metaklassenkonflikt?
"metaclass Konflikt: die Metaklasse einer abgeleiteten Klasse muss eine (nicht streng) Unterklasse der metaclasses aller Basen"
class M_A(object): pass
class A(object, metaclass = M_A): pass
Das Gleiche gilt für einen anderen Code:
class M_A(list): pass
class A(object, metaclass = M_A): pass
ich verstehe, dass die CPython den obigen Code wie interpretieren:
A = M_A.__new__(M_A, 'A', (object,), {})
Was mich verwirrt ist, dass die Basisklasse von A ist Objekt, und jede Klasse ist Unterklasse von Objekt. Dieser Fehler ist so seltsam. Was ist los mit mir?
'M_A' nicht eine Unterklasse eines metaclass jeder Basisklasse von' A' ist. 'class M_A (type): pass' wird wahrscheinlich funktionieren. – vaultah
Was mich verwirrt ist, dass die Basisklasse von A ist * Objekt *, und jede Klasse ist Unterklasse von * Objekt *. Ist M_A (list) eine Unterklasse einer Metaklasse irgendeiner Basisklasse von A? Ich denke, es ist. – ahui
@ahui 'M_A (Liste)' ist eine Unterklasse von 'Objekt', ja. Aber darum geht es in der Fehlermeldung nicht. 'M_A' muss eine Unterklasse von' object' _metaclass_ sein, was 'type' ist. –