Python isinstance(类型、对象)=True,为什么?

Python isinstance(类型、对象)=True,为什么?,python,object,types,python-datamodel,Python,Object,Types,Python Datamodel,我理解对象是类型的实例,类型继承自对象。因此,以下关系是有意义的: isinstance(object, type) # returns True, ok issubclass(type, object) # returns True, ok 我还知道isinstance(a,b)检查a是b的实例还是它的基。因此,以下内容也很有意义: isinstance(type, type) # returns True because

我理解对象是类型的实例,类型继承自对象。因此,以下关系是有意义的:

isinstance(object, type)            # returns True, ok
issubclass(type, object)            # returns True, ok
我还知道isinstance(a,b)检查a是b的实例还是它的基。因此,以下内容也很有意义:

isinstance(type, type)              # returns True because it is translated to ....
isinstance(type, object)            # which is True
我无法理解的是,为什么下面的陈述会返回真值

isinstance(type, object)            # returns True, but why?
isinstance(object, object)          # returns True, but why?

如果你知道,请告诉我。谢谢。

对象
是类层次结构的根,因此它是每种类型的最终父类,包括
类型
对象
。这使得
object
成为它自己的父类,这就是为什么不能单独用Python定义
object
;Python实现必须把它从稀薄的空气中拖拽出来


type
是一个类,所有(内置)类都是meta类
type
的实例。(是的,
type
是它自己的元类。)由于
object
type
的基类,因此
type
object
的实例。默认情况下,所有对象都是object超类的实例,因此
instance(type,object
返回
True

object类位于objects层次结构的顶部。即使AB的直接子级(在下面的示例中),并且两者都是object的间接子级

print(isinstance (object, object)) # True
print(isinstance (B, B)) # False
print(isinstance (A, A)) # False
isinstance()方法的编码方式是,如果两个参数都是对象,则返回
True
。在其他情况下,它检查第一个参数是否是第二个参数的实例

请看下面的代码示例

class A:
       pass

class B(A):
        pass

a = A()
b = B()

print(isinstance (a, A)) # True
print(isinstance (b, B)) # True
print(isinstance (b, A)) # True
print(isinstance (a, B)) # False

print(isinstance (a, object)) # True
print(isinstance (b, object)) # True
print(isinstance (A, object) ) # True
print(isinstance (B, object)) # True
对象对象的一个实例

print(isinstance (object, object)) # True
print(isinstance (B, B)) # False
print(isinstance (A, A)) # False
A不是A的实例,而B也是如此

print(isinstance (object, object)) # True
print(isinstance (B, B)) # False
print(isinstance (A, A)) # False
以下代码抛出错误,因为第二个参数应该是类的名称

print(isinstance (a, a)) 
"""
print(isinstance (a, a)) 
TypeError: isinstance() arg 2 must be a type or tuple of 
types
"""

print(isinstance (b, b)) 
"""
print(isinstance (b, b)) 
TypeError: isinstance() arg 2 must be a type or tuple of  
types
"""

因此,这一切都是关于isinstance()的代码逻辑或实现方法,如果两个参数都是对象
对象
则返回
True
,该方法是一个类型,因此是
类型
的实例。它也是
对象
的实例,因为它是一个对象。欢迎使用Python。处理元类型时,事情可能会变得混乱。@IgnacioVazquez Abrams,object是一种类型,因此是Agree类型的实例,与我的理解相同。它(object)也是object的实例是object(class)是object,还是它的实例object()是对象吗?所有类型都是对象。在Python中,所有东西都是对象的实例。包括类型、类、函数和许多其他你不希望成为对象的东西。你所说的都是正确的,和我的理解一样。但这不是对我问题的回答。我知道每种类型都是对象(凭借继承)。我的问题是为什么类型“是对象的实例”。有两种关系—“是的”和“是的实例”。前者是真的。为什么后者是真的?因为它是
type
的实例(
type
是它自己的元类),就像父类为
object
的任何其他对象的实例一样,它本身是
object
的(间接)实例。很好!明白了。所以关键是类型是它自己的元类。我不知道这一点。现在有意义了。请向上投票。谢谢。
print(isinstance (object, object)) # True
print(isinstance (B, B)) # False
print(isinstance (A, A)) # False