首页 > 解决方案 > `type.__instancecheck__` 是否实现了 `isinstance` 的默认行为?

问题描述

文档说以下内容:

[...] 如果已定义,则调用以实现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__中以获得默认行为。

标签: pythonpython-3.x

解决方案


isinstance__instancecheck__无论是否定义,都没有任何不同。此外,“后退”super().__instancecheck__(instance)是不必要的。根据https://bugs.python.org/issue35083,“任何对象x总是被认为是 的实例 type(x),并且不能被覆盖。”


推荐阅读