Python 对象(上)
admin
2023-07-30 22:44:02
0

Python是一门面向对象的语言,在Python中一切都是对象,函数是对象,类型也是对象。

下面就看看Python中对象相关的内容。

 

Python对象基本概念

Python对象有三个基本的要素:

  • 身份:对象的唯一性身份标志,是该对象的内存地址(可用内建函数id()获得)
  • 类型:对象的类型决定了该对象可以保存什么类型的值,可进行什么样的操作(可用内建函数type()获得)
  • 值:对象代表的数据

下面看看以下代码:

12345678910111213141516 num =7 print id(num)print type(num)print numprint dir(num) print  def isEven(num):    return (num%2 and [False] or [True])[0] print id(isEven)print type(isEven)print isEvenprint dir(isEven)

 

通过代码中可以看到,我们定义了一个int类型的数值对象,以及一个函数对象,通过内建的dir()函数,我们可以查看对象支持的属性/方法:

 

Python对象起源

在Python中有两个最基本的对象,,这两个对象是所有对象的起源。

通过下面的代码看看的关系:

代码中使用了”__class__”属性来查看对象的类型,以及”__bases__”属性来查看对象的父类,这两个属性很重要,可以查看本对象跟其他对象的关系。

根据上面代码的输出可以得到下面的对象关系图:

在Python对象系统中,的关系就像鸡和蛋的关系,不能说谁先于(创建)谁,两者是相互依赖的,共同构成了Python对象系统的基础。

  • 的类型是(它本身),的父类是
  • 的类型是没有父类

介绍到这里是不是感觉有点绕,没关系,我们继续看看下面关于对象的分类。

 

Python对象的分类

在Python中,所有的对象可以分成两类:Type Object(类型对象,没错,类型也是一个对象)和Non-type Object(非类型对象)。

下面通过一个具体的例子来看看对象的分类:

根据上面例子的输出可以得到下面的对象关系图:

这里我们就以list、mylist为例进行分析:

  1. 首先,list是一种Python内置的容器类型,也就是说list是一个类型对象
  2. 根据”__class__”属性可以看到,list这个类型对象的类型是
  3. 根据”__bases__”属性可以看到,list这个类型对象的父类是
  4. 通过mylist的”__class__”属性()可以看到,mylist是list类型对象生成的一个对象(Non-type Object(非类型对象))

通过上面的分析我们可以验证Python对象分类的原则:

如果一个对象是的实例, 那它就是Type Object(类型对象), 否则是Non-type Object(非类型对象)

Type Object和Non-type Object

通过前面的分析可以看到,Type Object(类型对象)包括:

  • 通过生成的对象(类型对象)

Type Object(类型对象)有两个重要的特性:

  • 可以被子类化(subclassed)
  • 可以被实例化(instantiated)

回到上面的对象图,Type Object(类型对象)就是存放在前两个方格中的对象。

那么其余的对象就是Non-type Object(非类型对象),回到对象图,Non-type Object(非类型对象)就是存放在第三个方格中的对象。实线不能出现在第三个方格中,因为这里的对象都不能进行子类化(继承);同样,虚线箭头不能出现在第三个方格中,因为这里的对象都不能进行实例化。

再看

本身是一个类型对象;同时,是所有类型对象(包括自身)的类型,也就是说,对所有的类型对象进行type()或者获取”__class__”属性都将得到

我们可以导入types模块,然后通过dir()内建函数来查看所有的内置类型对象,这些类型对象的类型都是

再看

同样,是一个类型对象(因为type(object)是);同时,是所有类型对象(除去本身)的父类。

type()和__class__

这里需要提一下的是,type()这个内置函数以及”__class__”这个属性,这两种方式都可以得到对象的类型,一般来说两种方式得到的结果是相同的。

但是,对于Python中的经典类(classic class),type()和”__class__”的结果就是不同的了(这里就不介绍classic class和new-style class了):

对于new-style class,type()和”__class__”的结果就是相同的了。

 

总结

本文介绍了Python对象中的一些基本点:

  • Python对象的三要素
  • Python对象中的两个基本对象
  • Python对象的分类:Type Object(类型对象)和Non-type Object(非类型对象)

通过这些点,应该可以对Python对象有基本的了解。当需要进行对象分析的时候,不妨试试文中使用的对象图,通过这个关系图,可以更加直观的看到对象之间的关系。


相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...