python中简述对象和类的关系_python中类型和对象之间的关系

type(x)之间的关系与x .__ class__的结果基本相同:

for obj in (object,type,1,str):

assert type(obj) is obj.__class__

print("type(obj) and obj.__class__ gave the same results in all test cases")

__bases__表示类派生自的基础:

class parent:

pass

class child(parent,int):

pass

print(child.__bases__)

但是如果你问的是对象和类型之间的奇怪关系:

>>> isinstance(object, object)

True

>>> isinstance(type, type)

True

>>> isinstance(object, type)

True

>>> isinstance(type, object)

True

这更像是鸡与蛋的问题:哪个先出现?

答案是PyObject,它用C语言定义.

在python解释器可用对象或类型之前,它们的基础机制在C中定义,并且在定义实例检查后将覆盖它们. (表现得像抽象类,见PEP 3119)

你可以认为它像这个python实现:

#this wouldn't be available in python

class superTYPE(type):

def __instancecheck__(cls,inst):

if inst ==TYPE:

return True

else:

return NotImplemented #for this demo

class TYPE(type,metaclass=superTYPE):

def __instancecheck__(cls,inst):

if inst in (OBJECT,TYPE):

return True

else:

return NotImplemented #for this demo

class OBJECT(metaclass=TYPE):

pass

print(isinstance(TYPE,OBJECT))

print(isinstance(OBJECT,TYPE))

print(isinstance(TYPE,TYPE))

print(isinstance(OBJECT,OBJECT))

实际上它可能更好地表示为:

#this isn't available in python

class superTYPE(type):

def __instancecheck__(cls,inst):

if inst in (TYPE,OBJECT):

return True

else:

return NotImplemented #for this demo

class OBJECT(metaclass=superTYPE):

pass

class TYPE(OBJECT):

pass

但是如果你想确切知道它是如何工作的,你需要查看用C编写的源代码.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值