learn with python-第十二章:类和对象
来源:互联网 发布:java notify wait死锁 编辑:程序博客网 时间:2024/05/07 17:05
第十二章:类和对象
12.1用户自定义的组合类型
我们已经接触到python内置的内省,现在我们打算自定义用户类型:Point
数学中的point包含两个维度,一个point是由两个数字组成的整体,在数学中,点用括号包括起来的两个数字表示,例如(0,0)表示原点,(x,y)表示在x轴值为x,y轴值为y的点。
python中表达点的方法也可以用两个数字,但是关键的问题是如何组织这两个数字,对于某些应用来说使用元组或者列表可能是一个选择。
另外一种选择是定义一个新的用户类型,称之为类。
类的定义如下:
class Point:
pass
程序中的类定义随处可见,但通常都是在程序头。通过创建类Point我们创建了一个新的类型,该类型的实例我们称之为对象,创建一个新对象我们称之为实例化,通过调用一个名为Point的函数我们创建Point对象
blank = Point()
12.2属性
通过“.”符号我们给实例添加属性
>>> blank.x = 3.0
>>> blank.y = 4.0
语法规则同从模块读取变量类似,这里我们从对象中读取数据条目,这些条目称之为属性。
blank指向一个Point对象,该对象拥有两个属性,每个属性指向一个浮点数。
12.3实例作为参数
我们可以将实例作为参数传入函数,例如:
def printPoint(p):
print '(' + str(p.x) + ', ' + str(p.y) + ')'
12.4相同
same这个单词含义似乎很明显,但是仔细想想,它可能包含了更多的意思。
例如:chris和我有相同的车,意思是chris的车和我的车牌子和型号相同,但是这两个不是一辆车,但是如果说我们拥有共同的一个地球,那么这个地球指的是同一个东西,因此same的含义同上下文相关。
对于对象也有这种模糊性,如果两个Point相同时意味着他们包含相同的数据还是两者就是同一个对象呢?
使用==操作符判断两个引用是否指向同一个对象
>>> p1 = Point()
>>> p1.x = 3
>>> p1.y = 4
>>> p2 = Point()
>>> p2.x = 3
>>> p2.y = 4
>>> p1 == p2
0
即使p1和p2包含相同的数据,他们也不是同一个对象,p1==p2表示这两个引用指向同一个对象。
为了比较这两个对象数据是否相同我们可以定义函数:
def samePoint(p1, p2) :
return (p1.x == p2.x) and (p1.y == p2.y)
12.6实例作为返回值返回
函数可以返回对象实例
12.7对象的可变性
我们可以通过改变对象的属性值改变对象的状态
box.width = box.width + 50
box.height = box.height + 100
12.8复制
对象的可变性让我们在改变一个引用所指向对象的值得时候会影响到另外一个引用,我们可以拷贝一个对象的副本赋值给另外一个引用
copy模块包含了一个方法copy可以赋值任何对象:
>>> import copy
>>> p1 = Point()
>>> p1.x = 3
>>> p1.y = 4
>>> p2 = copy.copy(p1)
>>> p1 == p2
0
>>> samePoint(p1, p2)
1
对于类似的简单对象,没有包含任何内置的对象,copy方法够用,我们称之为浅复制,如果对象之中包含其他的对象,我们就需要使用到深复制,将其内部包含的对象值也进行拷贝
>>> b2 = copy.deepcopy(b1)
0 0
- learn with python-第十二章:类和对象
- learn with python-第十五章:对象的集合
- learn with python-第二章:变量,表达式和申明
- learn with python-第十一章:文件和异常
- learn with python-第三章:函数
- learn with python-第七章:字符串
- learn with python-第八章:列表
- learn with python-第九章:元组
- learn with python-第十章:字典
- learn with python-第十五章:继承
- learn python第七章:面向对象编程 (第一节:类)
- 【Python】Learn Python the hard way, ex40 模块,类和对象,这个解释比较容易理解
- python 宝典 笔记 第十二章 存储数据和对象 (各种对象转换成字符串)
- Learn Python The Hard Way学习(40) - 模块,类和对象
- Learn Python The Hard Way学习(42) - 继承,包含,对象和类
- Python scikit-learn包中的环境和评估对象
- Python:with语句和上下文管理器对象
- learn with python-第一章:编程方法
- 《硝烟中的scrum和xp》读书笔记
- Go 1.3 Beta1 发布,支持谷歌 NaCL、编译更快
- ArrayBlockingQueueDemo
- linux系统日志远程备份策略
- Android开发之EditText属性详解
- learn with python-第十二章:类和对象
- 数据结构与算法分析学习笔记--第四章AVL树
- 不能将参数 1 从“WCHAR [260]”转换为“const char *”
- Cocos2d-x学习笔记(七) CCAction让你的精灵跑起来
- 双系统环境下,重装win7,恢复ubuntu的办法
- poj2229 Sumsets
- centos下安装的vsftpd服务,创建一个新的ftpuser账号,在window下连接后不能上传
- 单击改写文本颜色
- error LNK2005: DllMain already defined in corelibc.lib(dllmain.obj)