《Think Python》第17章学习笔记
《Think Python》第17章学习笔记
- 《Think Python》第17章学习笔记
- 17.1 面向对象的特性(Object-oriented features)
- 17.2 打印对象(Printing objects)
- 17.3 另一个例子(Another example)
- 17.4 一个更复杂的例子(A more complicated example)
- 17.5 __init__ 方法(The __init__ method)
- 17.6 __str__ 方法(The __str__ 方法)
- 17.7 运算符重载(Operator overloading)⭐️⭐️⭐
- 17.8 类型分发(Type-based dispatch)
- 17.9 多态(Polymorphism)
- 17.10 调试(Debugging)
- 17.11 接口和实现(Interface and implementation)
17.1 面向对象的特性(Object-oriented features)
Python 是一门面向对象的语言(object-oriented programming language),提供支持面向对象编程的特性。面向对象编程语言有以下的特性:
- 程序包含类和方法的定义
- 大部分的计算表示为对象上的操作
- 对象通常表示真实世界中的物体,而方法则对应于真实世界中的物体交互的方式
17.2 打印对象(Printing objects)
调用方法的对象称为主语(subject)。通常,方法的第一个参数是 self
。
17.3 另一个例子(Another example)
无
17.4 一个更复杂的例子(A more complicated example)
无
17.5 __init__
方法(The __init__
method)
在 Python 中,__init__
方法相当于 C++ 或者 Java 中的构造函数,当创建一个对象时会自动调用。
17.6 __str__
方法(The __str__
方法)
与 __init__
方法一样,__str__
也是一个特殊的方法,用于返回对象的字符串表示,跟 Java 中的 toString
方法有异曲同工之妙。
17.7 运算符重载(Operator overloading)⭐️⭐️⭐
在自定义的类中,通过定义一些特殊的方法,可以指定一些运算符的行为。比如,如果你为 Time
类对象定义了 __add__
方法,那么就可以在 Time
类对象上执行 +
操作。
改变一个运算符的行为,使得它可以作用在自定义类型上,这样的方式称为运算符重载(operator overloading)。对于 Python 中的每一个运算符,都有一个对应的特殊方法,像 +
运算符对应于 __add__
方法。
17.8 类型分发(Type-based dispatch)
根据传入参数(实参)的类型选择相应的操作的方式称为类型分发(type-based dispatch)。
17.9 多态(Polymorphism)
适用于多种类型的函数称为多态函数(polymorphic function)。多态有利于代码的重用。比如,内建函数 sum
,只要序列中的元素支持加法,它就能够计算一个序列中所有元素的和。
17.10 调试(Debugging)
如果想要查看一个对象是否包含特定的属性(attribute),一种方法是使用内建函数 hasattr
,另一种方式是使用内建函数 vars
,vars
的输入是一个对象,输出是 Python 的 字典类型。
>>> p = Point(3, 4)
>>> vars(p)
{'y': 4, 'x': 3}
下面这个函数对于调试是非常有帮助的:
def print_attributes(obj):
for attr in vars(obj):
print(attr, getattr(obj, attr))
17.11 接口和实现(Interface and implementation)
面向对象设计的目标之一就是使得软件更加容易维护,这意味着当系统的其他部分改变的时候,你的程序仍然适用,而且能够通过改变程序来满足新的要求。
实现这一目标的一个设计原则就是让接口和实现分离(to keep interfaces separate from implementations)。对于对象而言,这意味着这个类提供的方法不应该依赖于属性的表示方法。
《Think Python》第17章学习笔记的更多相关文章
- 《Linux内核设计与实现》第17章学习笔记
第17章.设备与模块 17.1设备类型 1.块设备(blkdev): 寻址以块为单位,通常支持重定位操作.通过称为“块设备节点”的特殊文件来访问. 2.字符设备(cdev): 不可寻址,仅提供数据的流 ...
- 《Linux内核设计》第17章学习笔记
- scala编程第17章学习笔记(4)——元组
元组可以把固定数量的条目组合在一起以便于作为整体传送.不像数组或列表,元组可以保存不同类型的对象. 元组常用来返回方法的多个值.例如,下面的方法找到集合中的最长单词并返回它的索引: scala> ...
- scala编程第17章学习笔记(3)
可变(mutable)集合与不可变(immutable)集合 为了更易于完成不可变集合到可变集合的转换,或者反向转换,Scala提供了一些语法糖.纵使不可变集和映射并不支持真正的+=方法,Scala还 ...
- scala编程第17章学习笔记(2)——集和映射
默认情况下在使用“Set”或“Map”的时候,获得的都是不可变对象.如果需要的是可变版本,需要先写明引用. 如果同一个源文件中既要用到可变版本,也要用到不可变版本的集合或映射,方法之一是引用包含了可变 ...
- scala编程第17章学习笔记(1)——集合类型
列表 列表的初始化及对其首尾的访问: scala> val colors = List("red", "blue", "green") ...
- 《Think Python》第16章学习笔记
目录 <Think Python>第16章学习笔记 16.1 Time 16.2 纯函数(Pure functions) 16.3 修改器(Modifiers) 16.4 原型 vs. 方 ...
- 《Think Python》第15章学习笔记
目录 <Think Python>第15章学习笔记 15.1 程序员定义的类型(Programmer-defined types) 15.2 属性(Attributes) 15.3 矩形( ...
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
随机推荐
- vs2015上使用github进行版本控制
我是用的是vs2015企业版 一.首先创建项目,右下角选择新建git存储库 二.在工具栏选择团队-管理连接,打开团队资源管理器,点击同步 . 三.选择下面的发布选项 四.在gitgub上新建仓库,得到 ...
- 73. 矩阵置零 leetcode JAVA
题目: 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ...
- 【Oracle 12c】最新CUUG OCP-071考试题库(53题)
53.(12-14) choose the best answer: Examine the command to create the BOOKS table. SQL>CREATE TABL ...
- Termux中安装gcc-7/gfortran-7实操过程,安装成功可以编译Fortran,c/c++
最近计算材料学的老师需要我们运行Fortran,又不想带电脑去教室.所以想起Termux了,于是就试试看这个宝贝能不能帮我的忙, 但是经过测试以后发现,clang只能编译c/c++那一类语言,不能编译 ...
- [Objective-C语言教程]结构体(17)
Objective-C数组可定义包含多个相同类型的数据项的变量类型,但结构体是Objective-C编程中的另一个用户定义数据类型,它可组合不同类型的数据项. 结构体用于表示记录,假设要图书馆中跟踪书 ...
- JavaBean简介及使用
JavaBean简介及使用 望星空 https://blog.csdn.net/joywy/article/details/7773503 一.JavaBean简介 JavaBean是使用Jav ...
- How to manage local libraries in IntelliJ IDEA
如何在 IntelliJ IDEA 中管理本地类库 一般来说,如果项目是基于 Maven 管理工具的,我们会在 pom.xml 中添加 dependency 来管理依赖.但有时也会遇到要用的类库不在 ...
- HTML01--基础概述
HTML:Hyper Text Markup Language,超文本标记语言,不是编程语言,而是标记语言,使用一套标记标签来描述网页.通常来说,我们平时打开浏览器看到的网页由三部分组成,分别是HTM ...
- (RaspBerry Pi) Python GPIO 基本操作
目前打算由潛入深慢慢學習RaspBerry Pi, 所以先由最容易下手的Python進入樹莓派的世界 首先要使用 GPIO 需要利用RPI.GPIO package想當然爾必須先安裝 所以先執行下列命 ...
- panda的query过滤
pandas中可以用query函数以类SQL语言执行查询.