Python对象(Object)与类型(Type)的关系


1、Object与Type概述


对象(Object)和类型(Type)是Python中两个最基本的概念,它们是构筑Python语言大厦的基石

所有的数据类型,值,变量,函数,类,实例等一切可操作的基本单元在Python中都是对象(Object),每个对象都有三个基本属性:ID、类型和值

a = 1
print(id(a), type(a), a)    # 1958094307568 <class 'int'> 1

id()内建方法获取对象的唯一编号,它是一个整数,通常就是对象的内存地址。type()内置方法获取对象的类型(Type)

一个对象可能有一个或多个基类(Bases),当一个对象表示数据类型时,比如int对象,它就具有了__bases__属性

print(int.__bases__)    # (<class 'object'>,)

type和bases定义了该对象与其他对象间的关系,实际上对象内的type和bases均指向其他对象,是对其他对象的地址引用

一个对象必有Type属性,同样Type是不能脱离开对象存在的

type()内置方法获取对象的类型。我们也可以使用对象.__class__来获取对象的类型,它们是等价的

print(type(a))        # <class 'int'>
print(a.__class__)    # <class 'int'>

Class和Type均是指类型(Type),Class通常用于普通用户使用class自定义的类型。Type通常指Python的解释器CPython内置的类型

CPython提供内置方法type()而没有定义class(),因为它们本质是一样的,只是不同的语境产生的不同说法

2、Object与Type的关系


Python中的对象之间存在两种关系:

  • 1)父子关系或继承关系(Subclass-Superclass或Object-Oriented),如“猫”类继承自“哺乳动物”类,我们说猫是一种哺乳动物。对象的__bases__属性记录这种关系,可以使用issubclass()判断
  • 2)类型实例关系(Type-Instance),如“米老鼠是一只老鼠”,这里的米老鼠不再是抽象的类型,而是实实在在的一只老鼠。对象的__class__属性记录这种关系,可以使用isinstance()判断

Python把对象分为两类:类型对象(Type)和非类型对象(Non-type)

  • 1)int、type、list等均是类型对象,可以被继承,也可以被实例化
  • 2)1、[1]等均是非类型对象,它们不可再被继承和实例化,对象间可以根据所属类型进行各类操作,比如算数运算

object和type是CPython解释器内建对象,它们的地位非常特殊,是Python语言的顶层元素:

  • 1)object是所有其他对象的基类,object自身没有基类,它的数据类型被定义为type
  • 2)type继承了object,所有类型对象都是它的实例,包括它自身。判断一个对象是否为类型对象,就看它是否是type的实例

在这里插入图片描述

其中,实线表示继承关系,虚线表示实例关系

isinstance()内置方法本质是在判断对象的数据类型,它会向基类回溯,直至回溯到object

print(isinstance(object, type))      # True
print(isinstance(type, object))      # True
print(isinstance(type, type))        # True
print(isinstance(object, object))    # True
print(object.__class__)              # <class 'type'>
print(type.__class__)                # <class 'type'>

Python中还定义了一些常量,比如True、False。其中有两个常量None和NotImplemented比较特殊,通过type()可以获取它们的类型为NoneType和NotImplementedType,这两个类型不对外开放,即普通用户无法继承它们,它们只存在于CPython解释器中

print(type(None))                    # <class 'NoneType'>
print(type(NotImplemented))          # <class 'NotImplementedType'>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值