2

我的理解是 object 是 type 的一个实例,type 从 object 继承。因此,以下关系是有意义的:

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

我无法理解的是为什么以下语句返回 True。

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

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

4

2 回答 2

3

object是类层次结构的根,因此它是每种类型的最终父类,包括typeobject。这产生object了它自己的父类,这也是你不能object单独在 Python 中定义的原因之一;它必须被 Python 实现拖着踢和尖叫。

type是一个类,所有(内置)类都是元类的实例type。(是的,type是它自己的元类。)因为object是 的基类type,因此type是 的实例object

于 2018-05-24T03:21:31.427 回答
0

Python 中的一切都是对象。默认情况下,所有对象都是对象超类的实例,因此instance(type, object返回True

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

isinstance()方法的编码方式是,True如果两个参数都是object ,它就会返回。在其他情况下,它检查第一个参数是否是第二个参数的实例。

请看下面的代码示例。

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

object是 object 的一个实例

print(isinstance (object, object)) # True

A不是 A 的实例同样适用于B

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
"""

因此,如果两个参数都是object,则它返回的isinstance()方法的所有代码逻辑或实现。True

于 2018-05-24T03:28:45.320 回答