gpt4 book ai didi

Python:isinstance(i, type(i)) 可以评估为 False 吗?

转载 作者:行者123 更新时间:2023-11-28 19:50:20 25 4
gpt4 key购买 nike

我在下面的代码中寻找 something 以便 isinstance() 之后的检查在任何情况下都评估为 True:

i = WonderfulClass()
classinfo_of_i = something(i)
isinstance(i, classinfo_of_i) # must evaluate to True

如果 type 是您的答案,请您解释原因,我将不胜感激。 typeisinstance 的真正对应物吗?或者,反过来问,您能想到 isinstance(i, type(i)) 计算结果为 False 的情况吗?

这个问题出现在 the simple way to check if the elements of a list or set are single type? 的背景下,我们必须遍历一个序列并检查所有序列元素是否属于同一类型。在这种情况下,元素将相互比较。这种比较可以基于 type 或基于 isinstance

相关documentation关于 isinstance(object, classinfo):

Return true if the object argument is an instance of the classinfo argument

最佳答案

"Is type the real counterpart of isinstance? Or, asked the other way round, can you think of a case where isinstance(i, type(i)) evaluates to False?"

我看不到 isinstance(i, type(i)) 不会返回 True 的任何情况。

type() 检查并从实例返回类型对象,因此返回值没有理由无法通过 isinstance() 检查。

深入研究 cPython 的源代码,我们看到 code behind type()简单地返回附加到实例的类型对象:

v = (PyObject *)o->ob_type;
Py_INCREF(v);
return v;

虽然第一件事是 isintance() code做的是检查类型是否完全匹配(稍后会继续匹配继承链中的类):

int
PyObject_IsInstance(PyObject *inst, PyObject *cls)
{
_Py_IDENTIFIER(__instancecheck__);
PyObject *checker;

/* Quick test for an exact match */
if (Py_TYPE(inst) == (PyTypeObject *)cls)
return 1;

请注意,Py_TYPE 只是一个返回 obj->ob_type 的宏,它与 type() 的返回值相匹配。这是 defined in Include/object.h作为:

#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)

关于Python:isinstance(i, type(i)) 可以评估为 False 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12403231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com