isinstance(type, object) = True, why?



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

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?

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

object

是类层次结构的根,因此它是每种类型的最终父类,包括typeobject。这使得object成为自己的父类,这就是为什么你不能单独在 Python 中定义object的原因之一;它必须被 Python 实现凭空拖拽和尖叫。

type是一个类,所有(内置(类都是元类type的实例。(是的,type是它自己的元类。并且由于objecttype的基类,所以typeobject的实例。

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

对象

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

isinstance((方法的编码方式是,如果两个参数都是object,则返回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

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

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

相关内容

  • 没有找到相关文章

最新更新