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层次结构的顶部。即使A是B的直接子级(在下面的示例中),并且两者都是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