我知道对象是类型的实例,类型继承自对象。因此,以下关系是有意义的:
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
是类层次结构的根,因此它是每种类型的最终父类,包括type
和object
。这使得object
成为自己的父类,这就是为什么你不能单独在 Python 中定义object
的原因之一;它必须被 Python 实现凭空拖拽和尖叫。
type
是一个类,所有(内置(类都是元类type
的实例。(是的,type
是它自己的元类。并且由于object
是type
的基类,所以type
是object
的实例。
Python 中的所有内容都是一个对象。默认情况下,所有对象都是对象超类的实例,因此instance(type, object
返回True
类位于对象层次结构的顶部。即使A是B的直接子级(在下面的示例中(,并且两者都是对象的间接子级。
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
。