对象(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(),因为它们本质是一样的,只是不同的语境产生的不同说法
Python中的对象之间存在两种关系:
__bases__
属性记录这种关系,可以使用issubclass()判断__class__
属性记录这种关系,可以使用isinstance()判断Python把对象分为两类:类型对象(Type)和非类型对象(Non-type)
object和type是CPython解释器内建对象,它们的地位非常特殊,是Python语言的顶层元素:
其中,实线表示继承关系,虚线表示实例关系
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)) #