《Think Python》第15章学习笔记
目录
- 《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章学习笔记相关推荐
- 《HeadFirst Python》第一章学习笔记
对于Python初学者来说,舍得强烈推荐从<HeadFirst Python>开始读起,这本书当真做到了深入浅出,HeadFirst系列,本身亦是品质的保证.这本书舍得已在<Pyth ...
- 流畅的python第一章_《流畅的Python》第一章学习笔记
一摞python风格的纸牌from collections import namedtuple Card = namedtuple('Card', ['rank', 'suit']) # 构建只有少数 ...
- 《流畅的Python》第一章学习笔记
一摞python风格的纸牌 from collections import namedtupleCard = namedtuple('Card', ['rank', 'suit']) # 构建只有少数 ...
- Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)
全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...
- Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)
全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...
- 基于python的数字图像处理--学习笔记(三)
基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...
- C++程序设计教程(钱能)第四章 学习笔记
C++程序设计教程(钱能)第四章 学习笔记 4.1 名词解释与操作符 4.1.1 名词解释 4.1.2 操作符汇总 4.1.3 操作符的说明 4.2 算数运算问题 4.2.1 周而复始的整数 4.2. ...
- Python+cplex运筹优化学习笔记(三)-营养膳食选择
Python+cplex运筹优化学习笔记(三)-营养膳食选择 前言 首先呢,说明一下,本文只是自己在学习过程中运用到的例子,然后规整总结一下,随便写写自己所做的一些笔记.小白学习,有不对的地方还望大家 ...
- 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录
基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...
- Python中索引的学习笔记
1 前言 今天在学习FaceBoxes- 看到一个比较奇怪的代码,"order = scores.argsort()[::-1][:args.top_k]",不太懂这个" ...
最新文章
- 【知乎热议】如何看待swin transformer成为ICCV2021的 best paper?
- 人类基因组最后一块拼图完成!Science罕见6篇连发
- Spring Boot(09)——使用SpringMVC
- 键盘流的逆袭- Idea 中使用 VIM mode 提高生成效率
- linux 关闭登录权限,linux – /var/www/html的权限[已关闭]
- 移动石头游戏中的博弈问题(洛谷P4136题题解,Java语言描述)
- spark学习-72-源代码:Endpoint模型介绍(4)-Spark为何使用Netty通信框架替代Akka
- RapidIOIP核的验证方法研究_王玉欢
- 【转】61条面向对象设计的经验原则
- jQuery 选择器简介
- C:\Program Files (x86)\SogouInput\Components\程序异常结束 ,QT
- 学习类APP如何规范
- 空手套白狼案例,18个月零成本开了 3 家健身房,分红400多万!
- 狂神HTML5学习笔记
- 美化Hexo 个人博客
- 计算机左侧没有桌面菜单栏,教您电脑菜单栏不见了
- Linux端口被占用怎么解决
- 关于python使用pandas导入dat数据文件的方法(可导入任意dat数据文件和csv数据文件)
- Java 实例 - 字符串小写转大写
- 如何系统地学习网络安全
热门文章
- RabbitMQ 交换机、队列、消息持久化
- 1.Java集合-HashMap实现原理及源码分析
- 如何在 Git 里撤销(几乎)任何操作
- Guava库学习:学习Guava Cache(二)Guava caches(2)
- Linux---Samba文件共享服务
- n维空间的欧氏距离公式_什么是“欧几里得距离”(ED)?| 群体遗传专题
- Android Studio 工程项目的结构
- CF984A Game
- [2018.09.08 T2] 最大土地面积
- 前端项目ip设置成0.0.0.0的原因