《Think Python》第15章学习笔记
《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
《Think Python》第15章学习笔记的更多相关文章
- 《Think Python》第17章学习笔记
目录 <Think Python>第17章学习笔记 17.1 面向对象的特性(Object-oriented features) 17.2 打印对象(Printing objects) 1 ...
- 《Think Python》第16章学习笔记
目录 <Think Python>第16章学习笔记 16.1 Time 16.2 纯函数(Pure functions) 16.3 修改器(Modifiers) 16.4 原型 vs. 方 ...
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
- 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记
注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...
- 学习笔记(一)--->《Java 8编程官方参考教程(第9版).pdf》:第一章到六章学习笔记
注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.违者本人不负法律责任.违法者自负一切法律责任. ...
- $《利用Python进行数据分析》学习笔记系列——IPython
本文主要介绍IPython这样一个交互工具的基本用法. 1. 简介 IPython是<利用Python进行数据分析>一书中主要用到的Python开发环境,简单来说是对原生python交互环 ...
- 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳
<Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...
- 《Linux内核设计与实现》 第一二章学习笔记
<Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...
- 《Linux内核设计与实现》第四章学习笔记
<Linux内核设计与实现>第四章学习笔记 ——进程调度 姓名:王玮怡 学号:20135116 一.多任务 1.多任务操作系统的含义 多任务操作系统就是能同时并发地交 ...
随机推荐
- unity 分数的显示
通常 在完成 条件之后再增加分数 所以 一开始先增加 public int 得到分数; public Text 分数ui; 在完成条件后增加 得到分数++; 分数ui.text = 得到分数.ToSt ...
- 再编写代码中报错:CS8107 C# 7.0 中不支持功能“xxxxxx”。请使用 7.1 或更高的语言版本。
解决方法:项目右键属性 ---> 生成 ---> 找到最下面的高级按钮,点击高级按钮 ---> 常规 ---> 语言版本 ---> 选择 C#最新次要版本,或者比当前版本 ...
- 如何修改Entity Framework Db Frist模式下的Entity继承关系?
1.准备工作 Db Frist创建实体数据模型(创建edmx并不是重点,各位随意即可),此处取名ZeroCodeDB,所得文件如图所示:其中红框中的文件(ZeroCodeDB.tt)是各实体的生成的关 ...
- Android 获取模拟器与真机数据库
模拟器: localuser:~ localhost$ adb shell shell@android:/ $ su // 数据库复制到 Download 下 shell@android:/ # cp ...
- “全栈2019”Java异常第二章:如何处理异常?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- linux中创建一个回收站
1. mkdir /tmp/trash_tmp 建立一个回收站目录 2. vi /bin/trash 编辑一个文件 mv $@ /tmp/trash_tmp :wq 保存退出 3. ...
- Win10内部更新:警告用户别用chrome和Firefox
简评:别和 Chrome 和 Firefox 约行不,我 Edge 明明更美.屁股更翘.更性感... 微软正在测试 Windows 10 的一个更新:警告用户不要安装 Chrome 和 Firefox ...
- 2016级算法第六次上机-F.AlvinZH的学霸养成记VI
1082 AlvinZH的学霸养成记VI 思路 难题,凸包. 分析问题,平面上给出两类点,问能否用一条直线将二者分离. 首先应该联想到这是一个凸包问题,分别计算两类点的凸包,如果存在符合题意的直线,那 ...
- 编程开发之--java多线程学习总结(4)
3.使用锁机制lock,unlock package com.lfy.ThreadsSynchronize; import java.util.concurrent.locks.Lock; impor ...
- IDEA External libraries 不显示Maven中引入的repository
原文:https://blog.csdn.net/dj_dengjian/article/details/88668012 记录一下遇到的这个问题的解决方法,也是困惑了半天,感觉这是maven的bug ...