Python3中的type和object

本文探讨了Python中的type和object类,指出一切皆为object,并详细阐述了它们之间的继承和实例化关系。type()函数用于获取对象的类型而不考虑继承,而isinstance()则考虑了继承链。所有类都是type的实例,而type本身既是类也是其自身的实例,是Python类型的起源。
摘要由CSDN通过智能技术生成

在这里插入图片描述
写这篇文章的原因就是因为看到这两条像是绕口令的推文,其中的两个主角分别是type和object


注意:以下内容仅适用于Python3,Python2在类的定义上有很大区别,故不在讨论范围内

背景知识

  • 在Python中一切皆object,要么是class instance,要么是metaclass instance
    >>> isinstance(type,object)
    True
    
    >>> isinstance(object,object)
    True
    
    >>> isinstance('abc',object)
    True
    
    >>> isinstance([1,2,3],object)
    True
    
    >>> isinstance(list,object)
    True
    
    >>> isinstance(str,object)
    True
    
    >>> isinstance((),object)
    True
    
  • object之间的关系只存在两种
    • 继承

      >>> class a():
      ...		pass
      
      # b继承a
      >>> class b(a):
      ... 	pass
      
      >>> b.__base__
      <class '__main__.a'>
      
      >>> isinstance(b, a)
      False
      
    • 实例化

      >>> class a():
      ...		pass
      
      >>> class b(a):
      ... 	pass
      
      # c实例化b
      >>> c = b()
      
      >>> isinstance(c, a)
      True
      
      >>> isinstance(c, b)
      True
      
      >>> c.__class__
      <class '__main__.b'>
      

用到的工具

object

首先说一下object
所有的类都继承自object
且所有对象一定是某一个类的实例

>>> class a():
... 	pass

>>> a.__base__
<class 'object'>

>>> class b(a):
... 	pass

>>> b.__base__
<class '__main__.a'>

object也是type元类的实例,它自己没有父类

>>> type(object)
<class 'type'>

>>> object.__base__

type

所有类对象都是type元类的实例

>>> class a():
... 	pass

>>> class b(a):
... 	pass

>>> type(a)
<class 'type'>

>>> type(b)
<class 'type'>

>>> type(int)
<class 'type'>

>>> type(str)
<class 'type'>

type元类也是对象,它是它自己的实例

>>> type(type)
<class 'type'>

type的父类是object,即type继承自object

>>> type.__base__
<class 'object'>

总结

综上,type元类和object类就是Python世界的奇点,type元类实例化出来了它自己以及object类,从此就通过实例化和继承产生无穷的object。

正所谓“太极生两仪 两仪生四象 四象生八卦 八卦演万物”

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值