目录

  • 《Think Python》第15章学习笔记

    • 15.1 程序员定义的类型(Programmer-defined types)
    • 15.2 属性(Attributes)
    • 15.3 矩形(Rectangles)
    • 15.4 对象作为返回值(Instances as return values)
    • 15.5 对象是可变的(Objects are mutable)
    • 15.6 复制(Copying)
    • 15.7 调试(Debugging)

《Think Python》第15章学习笔记

15.1 程序员定义的类型(Programmer-defined types)

定义一个类的过程会创建一个类型对象(type object)。比如,我们创建一个点(Point)类:

>>> class Point:
...     """
...     Represents a point in 2-D spaces.
...     """
...
>>> type(Point)
<class 'type'>
>>> Point
<class '__main__.Point'>

因为点(Point)类定义在最高层,因此,它的“全名”(full name)是 __main__.Point

一个类型对象(type object)就像一个“生产”对象的工厂,调用某一个类的类名,就可以创建该类的对象。调用的返回值是一个引用(reference),该引用指向该类的对象。比如,我们创建一个 Point 类的对象,则它的返回值是一个指向 Point 类对象的引用,同时我们将这个引用赋值给 blank 这个变量。

>>> blank = Point()
>>> blank
<__main__.Point object at 0x100ef2c50>

生成一个新对象的过程称为实例化(instantiation),生成的对象称为该类的一个实例(instance)

15.2 属性(Attributes)

15.3 矩形(Rectangles)

15.4 对象作为返回值(Instances as return values)

15.5 对象是可变的(Objects are mutable)

15.6 复制(Copying)

在 Python 中,is 运算符判断的是两个引用是否指向同一个对象(即引用相等),而 == 运算符判断的是两个对象是否相等(即值相等)。这一点与 Java 恰好相反,在 Java 中,== 运算符判断的是引用相等,而值相等则是通过 equals 方法进行判断的。

但是,在 Python 中,对于用户自定义的类,== 运算符与 is 运算符实现的功能是一样的,都是检查对象的引用是否相等。

# Case 1
>>> l1 = ['I', 'Love', 'Python']
>>> l2 = l1
>>> l1 is l2
True
>>> l1 == l2
True
>>> id(l1)
4502865672
>>> id(l2)
4502865672# Case2
>>> l1 = ['a', 'b']
>>> l2 = ['a', 'b']
>>> l1 is l2
False
>>> l1 == l2
True
>>> id(l1)
4502885192
>>> id(l2)
4502885128

当你调用 copy 模块的 copy 方法复制对象时,实际上只是执行浅复制(shallow copy),即 copy 方法只会复制该对象以及它包含的引用,而不包含引用所指向的对象。copy 模块的另一个方法 deepcopy 则不只是复制对象以及对象包含的引用,同时也会复制引用所指向的对象,这样操作称为深复制(deep copy)

15.7 调试(Debugging)

可以用内建函数 isinstance 来检查一个对象是否为某个类的实例。

>>> isinstance(p, Point)
True

可以用内建函数 hasattr 来检查一个对象是否含有某个特定的属性(attribute)。

>>> hasattr(p, 'x')
True

除了可以使用 hasattr 方法,也可以使用 try 语句。

try:x = p.x
except AttributeError:x = 0

转载于:https://www.cnblogs.com/xugenpeng/p/9159689.html

《Think Python》第15章学习笔记相关推荐

  1. 《HeadFirst Python》第一章学习笔记

    对于Python初学者来说,舍得强烈推荐从<HeadFirst Python>开始读起,这本书当真做到了深入浅出,HeadFirst系列,本身亦是品质的保证.这本书舍得已在<Pyth ...

  2. 流畅的python第一章_《流畅的Python》第一章学习笔记

    一摞python风格的纸牌from collections import namedtuple Card = namedtuple('Card', ['rank', 'suit']) # 构建只有少数 ...

  3. 《流畅的Python》第一章学习笔记

    一摞python风格的纸牌 from collections import namedtupleCard = namedtuple('Card', ['rank', 'suit']) # 构建只有少数 ...

  4. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  5. Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)

    全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...

  6. 基于python的数字图像处理--学习笔记(三)

    基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...

  7. C++程序设计教程(钱能)第四章 学习笔记

    C++程序设计教程(钱能)第四章 学习笔记 4.1 名词解释与操作符 4.1.1 名词解释 4.1.2 操作符汇总 4.1.3 操作符的说明 4.2 算数运算问题 4.2.1 周而复始的整数 4.2. ...

  8. Python+cplex运筹优化学习笔记(三)-营养膳食选择

    Python+cplex运筹优化学习笔记(三)-营养膳食选择 前言 首先呢,说明一下,本文只是自己在学习过程中运用到的例子,然后规整总结一下,随便写写自己所做的一些笔记.小白学习,有不对的地方还望大家 ...

  9. 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录

    基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...

  10. Python中索引的学习笔记

    1 前言 今天在学习FaceBoxes- 看到一个比较奇怪的代码,"order = scores.argsort()[::-1][:args.top_k]",不太懂这个" ...

最新文章

  1. 【知乎热议】如何看待swin transformer成为ICCV2021的 best paper?
  2. 人类基因组最后一块拼图完成!Science罕见6篇连发
  3. Spring Boot(09)——使用SpringMVC
  4. 键盘流的逆袭- Idea 中使用 VIM mode 提高生成效率
  5. linux 关闭登录权限,linux – /var/www/html的权限[已关闭]
  6. 移动石头游戏中的博弈问题(洛谷P4136题题解,Java语言描述)
  7. spark学习-72-源代码:Endpoint模型介绍(4)-Spark为何使用Netty通信框架替代Akka
  8. RapidIOIP核的验证方法研究_王玉欢
  9. 【转】61条面向对象设计的经验原则
  10. jQuery 选择器简介
  11. C:\Program Files (x86)\SogouInput\Components\程序异常结束 ,QT
  12. 学习类APP如何规范
  13. 空手套白狼案例,18个月零成本开了 3 家健身房,分红400多万!
  14. 狂神HTML5学习笔记
  15. 美化Hexo 个人博客
  16. 计算机左侧没有桌面菜单栏,教您电脑菜单栏不见了
  17. Linux端口被占用怎么解决
  18. 关于python使用pandas导入dat数据文件的方法(可导入任意dat数据文件和csv数据文件)
  19. Java 实例 - 字符串小写转大写
  20. 如何系统地学习网络安全

热门文章

  1. RabbitMQ 交换机、队列、消息持久化
  2. 1.Java集合-HashMap实现原理及源码分析
  3. 如何在 Git 里撤销(几乎)任何操作
  4. Guava库学习:学习Guava Cache(二)Guava caches(2)
  5. Linux---Samba文件共享服务
  6. n维空间的欧氏距离公式_什么是“欧几里得距离”(ED)?| 群体遗传专题
  7. Android Studio 工程项目的结构
  8. CF984A Game
  9. [2018.09.08 T2] 最大土地面积
  10. 前端项目ip设置成0.0.0.0的原因