Python 对象

本文深入探讨Python的对象模型,解析Python对象的三大特征:身份、类型和值,并介绍Python的标准类型,包括数字、字符串、列表、元组和字典等。此外,还详细解释了Python的类型工厂函数和标准类型操作符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python 核心编程[第四章]

0x00 Python 对象

Python 使用对象模型来存储数据,构造任何类型的值都是一个对象。(万物皆对象)

所有的 Python 对象都拥有三个特征:身份、类型、值。

  • 身份:每个 Python 对象都有一个唯一的身份标识自己,任何对象的身份可以使用 id() 来得到。
  • 类型:类型决定了 Python 对象可以保存什么类型的值,可以进行什么操作,需要遵守什么规则。使用 type() 查看 Python 对象的类型。因为 Python 中"类型"也是对象,所以 type()返回的对象不是单纯的字符串。
  • 值:对象表示的数据项。

上面三个特性在对象创建时就被赋值,除了值以外其他两个特征都是只读的。对于新式类型和类,对象的类型也是可以改变的。如果对象支持更新操作,那么它的值就可以改变,否则它的值也是可读的。只要一个对象还没有被销毁,这些特性就一直存在。

  • 对象属性
    某些 Python 对象有属性、值或相关联的可执行代码,比如方法,Python 用(.)标记法访问属性。属性包括响应对象的名字等,最常见的属性是函数和方法,不过有一些 Python 类型也有数据属性。含有数据属性的对象有:类、类实例、模块、复数和文件等。

0x01标准类型

基本数据类型

  • 数字
  • Integer 整型
  • Boolean 布尔
  • Long integer 长整型
  • Floating point real number 浮点型
  • Complex number 复数型
  • String 字符串
  • List 列表
  • Tuple 元组
  • Dictionary 字典

0x02其他内建类型

  • 类型
  • Null 对象(None)
  • 文件
  • 集合 / 固定集合
  • 函数 / 方法
  • 模块
1.类型对象和 type 类型对象
  • 所有类型对象的类型都是 type ,它也是所有 Python 类型的根和所有 Python 标准类的默认元类。类就是类型,实例是对应类型的对象。
2.None Python 的 Null 对象

NoneType 类型只有一个值,那就是 None ,它不支持任何运算也没有任何内建方法,None 没有什么有用的属性,它的布尔值总是 False。

布尔值为 False 的对象
None
False
所有的值为零的数
0
0.0
0L
0.0+0.0j
“”
[]
()
{}
除了上述其他任何对象的布尔值都是 True

0x03内部类型

1.代码对象
2.帧对象
3.跟踪记录对象
4.切片对象
5.省略对象
6.XRange 对象

0x04标准类型操作符

1.对象值的比较
  • < > <= >= == !=

  • 多个比较操作可以在同一行上进行

    # 例:
    print(4 > 5 > 6)
    
2.对象身份比较
a is b <=> id(a) == id(b)
# 如果是同一个对象则返回 True 
a is not b <=> id(a) != id(b)
# 如果不是一个对象则返回 False

在字符串(长度比较短的可以)和整型[-1,100] (这个返回会改变)会存在缓存机制,即两次将同一个值如 1 赋值给不同变量会造成 id 相同的假象,不过这个过程确实创建了新对象,如果这个值为 1.0 则同时赋值给两个变量不会出现这种情况。

3.布尔类型
  • (and) (or) (not) <=> C (&&) (||) (!)

0x05标准类型内建函数

  • repr:返回一个字符串,即将参数两边加引号后返回
  • str:转换为字符串类型
  • type:返回相应的 type 对象
    -标准类型和内建函数

0x06类型工厂函数

所有得内建类型现在也都是类,原来的内建转换函数 int()、type()、list() 等,现在都成了工厂函数。虽说它们像函数,实质上它们是类。当你调用它们时,实际上时生成了一个类型的实例。

  • 工厂函数
    • 之前是内建函数的工厂函数
      • int()
      • long()
      • float()
      • complex()
      • str()
      • unicode()
      • basestring()
      • list()
      • tuple()
      • type()
    • 其他工厂函数
      • dict()
      • bool()
      • set()
      • frozenset()
      • object()
      • classmethod()
      • staticmethod()
      • super()
      • property()
      • file()

0x07标准类型的分类

“基本内建数据对象原始类型”

  • 基本:指的是 Python 提供的核心或标准类型
  • 内建:Python 默认提供类型
  • 数据:存储数据的类型
  • 对象:数据和存储的默认抽象
  • 原始:提供最底层的粒度数据存储的类型
  • 类型:数据类型的类型

通过三种不同模型理解基本类型的分类

1.存储模型(一种类型的分类方式)
  • 通过查看这种类型能保存多少对象进行分类

  • 原子 / 标量存储:能保存单个字面对象的类型

  • 容器存储:可以容纳多个对象的类型(所有 Python 容器对象都能给容纳不同对象)

    分类Python 类型
    标量 / 原子类型数值(所有的数值类型),字符串(全部是文字)
    容量类型列表、元组、字典
2.更新模型
  • 通过类型可不可以更新分类
    分类Python 类型
    可变类型列表、字典
    不可变类型数字、字符串、元组
3.访问模型
  • 根据对存储数据的访问方式对数据类型进行分类
  • 直接存取
  • 顺序存取(序列类型)
  • 映射存取
    分类Python 类型
    直接访问数字
    顺序访问字符串、列表、元组
    映射访问字典

0x08不支持的类型

1.char 或 byte

Python 没有 char 或 byte 类型来保存单一字符或 8 位整数,可以用长度为 1 的字符串表示字符或 8 位整数。

2.指针

Python 替你进行内存管理,因此没必要访问指针。在 Python 中你可以使用 id() 函数得到一个对象的身份,这是最接近指针的地址。

3.int vs short vs long

Python 的普通整形相当于标准整型类型,不需要类似 C 语言中的 int、short、long 这三种整型类型。Python 的整型实现等同于 C 语言的长整型,即便超出整型的表达范围,Python 也会自动返回一个长整型给你而不会报错。

4.float vs double

Python 的浮点类型实际上是 C 语言的双精度浮点类型。Python 认位支持两种浮点类型好处和开销不成正比,所以不支持单精度。Python 还有一种十进制浮点型类型 Decimal,不过你必须导入 decimal 模块才可以使用它,浮点型总是不精确的。Decimals则拥有任意的精度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值