type .__ instancecheck__是否实现isinstance的默认行为?

时间:2020-09-30 12:38:32

标签: python python-3.x

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__以获得默认行为。

1 个答案:

答案 0 :(得分:0)

在定义或未定义isinstance的情况下,

__instancecheck__的行为没有任何不同。此外,super().__instancecheck__(instance)上的“后退”也是不必要的。根据{{​​3}},“任何对象x始终被视为以下对象的实例: type(x),并且无法覆盖。”

相关问题