python - `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__
中以获得默认行为。
解决方案
isinstance
__instancecheck__
无论是否定义,都没有任何不同。此外,“后退”super().__instancecheck__(instance)
是不必要的。根据https://bugs.python.org/issue35083,“任何对象x
总是被认为是 的实例
type(x)
,并且不能被覆盖。”
推荐阅读
- sql - 根据特定列连接/合并来自两个不相关表的记录
- javascript - 选中/取消选中输入(复选框)php变量
- angularjs - 硒点击是异步的吗?
- python - 从 numpy 向量中随机替换索引
- ballerina - Ballerina 中 JSON int vs float 转换的最佳实践
- c - 用 C 读取文本文件
- python - 如何有效地更改 3rd 方 django 应用程序?
- java - 冒泡排序(单链表)错误
- node.js - 为什么我不能在一个 post 请求中使用 res.json() 两次?
- arrays - 我可以确保 NVCC 已设法将数组放入寄存器中吗?