《树莓派Python编程指南》——3.6 使用类来构建对象

简介:

本节书摘来自华章计算机《树莓派Python编程指南》一书中的第3章,第3.6节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.6 使用类来构建对象

类允许你将数据和函数组合起来构成一个对象。实际上,我们在前面章节中已经使用过它。回忆下这两行:


<a href=https://yqfile.alicdn.com/cf3a137ccff8e48abc102f32e14f61d197d0c716.png
" >

当时我们只是快速跳过去,现在让我们来看看它是如何工作的。turtle.Turtle()返回一个由turtle模块中Turtle类创建的对象。同样的,tuttle.Screen()返回一个由turtle模块中Screen类创建的对象。简而言之,类是用来构建对象的蓝图。对象可以存储数据,并且提供可以让你操作数据的方法。而方法其实就是类中的函数。
你已经见识过对象是多么有用了。在第2章的例子中,你不用关心turtle的数据是如何存放的,因为它们已经包含在对象中了。你只需要将turtle对象保存在一个叫babbage的对象里,当调用某个方法时,该方法就知道如何存取它需要的各种东西。这样可以使程序整洁易用。例如下面的例子:

<a href=https://yqfile.alicdn.com/ea45279ab371bc5f4df33ddd06e948805404a8ab.png
" >

这行代码将turtle向前移动并将结果画在屏幕上。在屏幕上画这条线,它知道用什么颜色的画笔,turtle的起始位置在哪里以及其他各种它所需要的信息,因为它们都已经存储在对象中了。
让我们用一个简单的例子看看对象里都有什么东西:

3ecc3af50af6d65e782bf9cceb0547785369282a

这里有几点需要注意,Python中,变量、函数和方法的名字通常用小写字母,类是个例外。因此Person类由大写字母P开头。如果不这样做Python也不会报错,但遵守惯例可以方便人们阅读对方的代码。可以看到,方法的定义方式和函数一样,区别只是参数总是以self开始,这表示本地变量。在这个例子中,本地变量包括self.age和self.name。它们会在类的每一个实例中都创建一份。本例中,我们用People类创建了两个对象(即类的实例),每个对象都有各自的一份self.age和self.person拷贝。我们可以在对象外面读写它们(就像我们在print方法中使用的那样)。这被称为Person类的属性。
这里还有两个方法。__init__是每个类都有的特殊方法。该方法在创建或“初始化”类的实例时会被调用。因此,ben = Person(31, “Ben”)会创建Person类的一个对象,并使用参数(31, “Ben”)调用__int__方法。通常可以用来设置属性。第二个方法birthday()展示了如何使用类方法而不用在类的外面关心数据的保存问题。给Person对象一个birthday()方法,拿来用就可以了,例如:

b12f1eef743864178d1a86131b245aff10d572e0

它将把age加一。
有时,我们不希望从头开始创建类,而是根据已经存在的类来建一个新的类。例如,如果你想创建一个类来保存parents(父母)的相关信息,它们也存在年龄(age),名字(name),和生日(birthday),如果再为Parent写一遍这些代码就会显得浪费。Python允许我们从其他类中继承。下面给出一个例子:

06e5c48f0c1ebd03761be668e316360967bd8eb8

Person是Parent的超类,Parent是Person的子类。把类名放入要定义的类名后面的括号里,它就变成这个要定义的类的超类。你可以调用超类的__init__方法,会自动获得超类的属性和方法的访问权限而不用重写代码。
类的最大优势就是它可以方便重用代码。像我们在前几章中看到的那样,它可以方便地操纵turtle而不用关心它做了些什么,是怎么做的。因为turtle类封装了这些信息,你只要知道方法名字,就可以毫无障碍地使用它们了。贯穿本书,你将看到如何使用类提供的方法方便地构建复杂游戏,而不用担心这些方法的技术细节是如何实现的。
下面的代码使用类重写了学生数据库程序,感受下类是如何工作的(文件名chapter3-student-2.py)

65aad04417860465f62afecb6f1e5a72917966dd


5f15af8fa20d1dede990756c6f8f905ae8f3ef5c


<a href=https://yqfile.alicdn.com/6008116c2455ba84e4dbc144b47fbb3e1aead45b.png" >
相关文章
|
2月前
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
457 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
2月前
|
机器学习/深度学习 算法 量子技术
GQNN框架:让Python开发者轻松构建量子神经网络
为降低量子神经网络的研发门槛并提升其实用性,本文介绍一个名为GQNN(Generalized Quantum Neural Network)的Python开发框架。
52 4
GQNN框架:让Python开发者轻松构建量子神经网络
|
24天前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
279 1
|
25天前
|
安全 JavaScript Java
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
本文通过10个真实场景,深入解析Python中表示“空值”的None与NoneType。从单例模式、函数返回值,到类型注解、性能优化,全面揭示None在语言设计与实际编程中的核心作用,帮助开发者正确高效地处理“无值”状态,写出更健壮、清晰的Python代码。
117 3
|
1月前
|
Python
解决Python中AttributeError:'image'对象缺少属性'read_file'的问题策略。
通过上述策略综合考虑,您将能够定位问题并确定如何解决它。记住,Python社区很庞大,也很乐于帮助解决问题,因此不要害怕在求助时提供尽可能多的上下文和您已经尝试过的解决方案。
66 0
|
3月前
|
数据采集 数据可视化 JavaScript
用Python采集CBC新闻:如何借助海外代理IP构建稳定采集方案
本文介绍了如何利用Python技术栈结合海外代理IP采集加拿大CBC新闻数据。内容涵盖使用海外代理IP的必要性、青果代理IP的优势、实战爬取流程、数据清洗与可视化分析方法,以及高效构建大规模新闻采集方案的建议。适用于需要获取国际政治经济动态信息的商业决策、市场预测及学术研究场景。
|
3月前
|
数据采集 Web App开发 自然语言处理
利用Python构建今日头条搜索结果的可视化图表
利用Python构建今日头条搜索结果的可视化图表
|
5月前
|
Python
解决Python报错:DataFrame对象没有concat属性的多种方法(解决方案汇总)
总的来说,解决“DataFrame对象没有concat属性”的错误的关键是理解concat函数应该如何正确使用,以及Pandas库提供了哪些其他的数据连接方法。希望这些方法能帮助你解决问题。记住,编程就像是解谜游戏,每一个错误都是一个谜题,解决它们需要耐心和细心。
242 15
|
5月前
|
安全 测试技术 开发者
Python中的“空”:对象的判断与比较
在Python开发中,判断对象是否为“空”是常见操作,但其中暗藏诸多细节与误区。本文系统梳理了Python中“空”的判定逻辑,涵盖None类型、空容器、零值及自定义对象的“假值”状态,并对比不同判定方法的适用场景与性能。通过解析常见误区(如混用`==`和`is`、误判合法值等)及进阶技巧(类型安全检查、自定义对象逻辑、抽象基类兼容性等),帮助开发者准确区分各类“空”值,避免逻辑错误,同时优化代码性能与健壮性。掌握这些内容,能让开发者更深刻理解Python的对象模型与业务语义交集,从而选择最适合的判定策略。
183 5

热门文章

最新文章

推荐镜像

更多