The docs说以下话:
[...]如果定义,则调用以实现
isinstance(instance, class)
。
该措辞表明,无论是否定义__instancecheck__
,这都将有所作为。即它不会说“实现isinstance
的替代” ,因为很明显基本实现(type.__instancecheck__
)提供了默认行为。
更具体地说,我想知道以下元类是否会导致类似的行为,就像我省略了__instancecheck__
的定义一样:
class Meta(type):
def __instancecheck__(self, instance):
return super().__instancecheck__(instance)
class Test(metaclass=Meta):
pass
isinstance(<something>, Test)
我的直觉说是,但是文档的措辞让我担心isinstance
会根据是否定义__instancecheck__
而采用不同的路径。最后,我想知道在我自己的super().__instancecheck__(instance)
实现中是否可以退回到__instancecheck__
以获得默认行为。
答案 0 :(得分:0)
isinstance
的情况下, __instancecheck__
的行为没有任何不同。此外,super().__instancecheck__(instance)
上的“后退”也是不必要的。根据{{3}},“任何对象x
始终被视为以下对象的实例:
type(x)
,并且无法覆盖。”