Ich habe folgenden python3 Code:Warum wird __instancecheck__ nicht aufgerufen?
class BaseTypeClass(type):
def __new__(cls, name, bases, namespace, **kwd):
result = type.__new__(cls, name, bases, namespace)
print("creating class '{}'".format(name))
return result
def __instancecheck__(self, other):
print("doing instance check")
print(self)
print(other)
return False
class A(metaclass=BaseTypeClass):
pass
print(type(A))
print(isinstance(A(), A))
und wenn ich es auf Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32
laufen bekomme ich folgende Ausgabe
creating class 'A'
<class '__main__.BaseTypeClass'>
True
Warum es nicht doing instance check
ausgibt? Die documentation sagt die __instancecheck__
Methode muss auf der Metaklasse und nicht die Klasse selbst definiert werden, die ich hier getan habe. Ich überprüfe sogar, dass die Metaklasse verwendet wird, da creating class 'A'
gedruckt wird. Wenn ich isinstance
aufrufen, scheint es jedoch die Standardimplementierung zu verwenden und nicht die, die ich in der Metaklasse definiert habe.
Ich verwende wahrscheinlich keine Metaklassen korrekt, aber ich kann nicht herausfinden, wo ich meinen Fehler gemacht habe.
Lassen Sie uns versuchen, dieses "Implementierungsdetail" zu umgehen ... – jsbueno
nur als eine ungerade Randnotiz, wenn Sie '__instancecheck__' als Methode für eine normale Klasse definieren, können Instanzen der Klasse als zweites Argument von' verwendet werden issinstance' – drdrez