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

Object与Type

    • 1、Object与Type概述
    • 2、Object与Type的关系


1、Object与Type概述


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

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

a = 1
print(id(a), type(a), a)    # 1958094307568  1

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

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

print(int.__bases__)    # (,)

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

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

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

print(type(a))        # 
print(a.__class__)    # 

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的实例

Python对象(Object)与类型(Type)的关系_第1张图片

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

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__)              # 
print(type.__class__)                # 

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

print(type(None))                    # 
print(type(NotImplemented))          # 

你可能感兴趣的:(#,Python,python,开发语言)