全网最适合入门的面向对象编程教程:02 类和对象的Python实现-使用Python创建类

全网最适合入门的面向对象编程教程:02 类和对象的 Python 实现-使用 Python 创建类

摘要

本文主要介绍了串口通信协议的基本概念、串口通信的基本流程、如何使用 Python 语言创建一个类和类内成员中属性和方法的定义。

正文

这里开始,我们将以嵌入式中常用的串口通信协议为例,讲解以下知识:

① 如何在 Python 中创建类和对象;

② 如何为 Python 对象添加属性和行为;

③ 如何将类组织成包和模块;

④ 如何限制外部访问私有数据。

在使用 Python 进行编程之前,我们先回想一下平时我们是如何使用串口的。总结来说,无非就是下面几个步骤:

① 首先,我们需要确定要使用的串口号。

② 其次,配置波特率、数据位、奇偶校验位、停止位、DTR/DSR、RTS/CTS 和 XON/XOFF。

③ 第三,打开串口。

④ 第四,收发数据。

⑤ 第五,关闭串口。

接下来,我们就来研究下用 Python 怎么实现面对对象的串口操作。

在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段,由于 Python 是动态语言,类是动态生成的。通过 class 关键字我们可以定义一个新的类型,class 之后为类的名称并以冒号结尾:

_# 类名必须遵循标准的 Python 变量名准则_
_# 必须以字母或下画线开头,并只能由字母、下画线或数字组成_
_# PEP 8标准建议类名应该用驼峰格式:_
_#   以大写字母开头,任意后续单词都以大写字母开头_
class ClassName:pass

类的定义行后面是类的内容块。和其他的 Python 代码结构一样,类也用缩进而非其他语言常用的大括号或方括号来界定。Python 中尽量用 4 个空格作为缩进。任何好用的代码编辑器都支持将 Tab 键输入替换为 4 个空格。由于示例中第一个类实际上什么都不做,因此我们简单地在第 2 行用 pass 关键字表示下面没有进一步的动作了。

class ClassName:passc = ClassName()
print(id(ClassName), type(ClassName), ClassName)
print(id(c), type(c), c)

image

这里,我们使用 printf 函数输出类和实例的相关信息。需要说明的是,在 Python,所有的数据类型,值,变量,函数,类,实例等等一切可操作的基本单元都使用对象(Object)表示。每个对象有三个基本属性:ID,类型和值,也即有一块内存中存储了一个对象,这块内存中一定存有这三个属性。在以上的输出中,我们可以看到在 Python 中定义一个新类(Class)等于创建了一个新类型(Type)的对象(Object),解释器中一切对象均存储在 PyObject 结构中。

示例中,我们定义了一个自己的类型 ClassName,c 是它的实例(Instance),它的类型是 main.ClassName。Class 和 Type 均是指类型(Type),Class 通常用于普通用户使用 class 自定义的类型。Type 通常指 Python 的解释器 CPython 内置的类型。

<__main__.ClassName object at 0x00000281CFD71190>

指明了当前实例 c 所处内存空间为 0x00000281CFD71190。

这里,我们首先创建一个串口类 SerialClass:

_# 创建一个串口类_
class SerialClass:pass

但可以看到,我们并没有定义类中任何东西,现在该怎么操作呢,怎么实现一个串口的收发功能呢?对于一个类而言,一般具有两个成员:属性和方法。用来描述具体某个对象的特征的是属性,是静态的,例如串口通信需要设置的一些参数,如波特率、数据位位数等。每个对象有它们自己的行为或者是使用它们的方法,比如串口发送数据、接收数据、设置通信参数等,我们把这些行为称之为方法,是动态的,可以使用这些方法来操作一个对象。

关于如何为我们刚刚创建的串口类添加属性和方法,我们下一节会讲到。

文档和代码获取

可访问如下链接进行对文档下载:

https://github.com/leezisheng/Doc

image

本文档主要介绍如何使用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向对象编程的博客或书籍而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口数据收发、数据处理、动态图绘制等为应用实例,同时使用 Sourcetrail 代码软件对代码进行可视化阅读便于读者理解。

相关示例代码获取链接如下:https://github.com/leezisheng/Python-OOP-Demo

image

往期推荐:

学嵌入式的你,还不会面向对象??!

全网最适合入门的面向对象编程教程:00 面向对象设计方法导论

全网最适合入门的面向对象编程教程:01 面向对象编程的基本概念

更多精彩内容可看:

给你的 Python 加加速:一文速通 Python 并行计算

一文搞懂 CM3 单片机调试原理

肝了半个月,嵌入式技术栈大汇总出炉

电子计算机类比赛的“武林秘籍”

一个MicroPython的开源项目集锦:awesome-micropython,包含各个方面的Micropython工具库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/731900.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[C++ Primer] IO库

IO库 IO类为了支持不同种类的IO处理操作,标准库定义了一些IO类型,分别定义在三个独立的头文件中:iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型。IO对象不能拷贝或赋值,常以引用方式传递,读写IO对象会改变…

跟着狂神学JAVA

学习JAVA的第一天 一级标题:前面加#空格,以此类推,最多6级标题 标题 三级标题 四级标题 字体 Hello,World! Hello,World! Hello,World! Hello,World! 引用 大于符号 >选择狂神说java,走向人生巅峰分割线 三个 - 或者三个 *图片 ![]+(),()里填写图片路径超链接 []+() 点击…

Linux 提权-LXD 容器

本文通过 Google 翻译 LXD Container – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。0 前言 1 什么是 LXD 和 LXC ? 2 查找 LXD 组权限2.1 手动搜索 LXD 组用户 2.2 LXD 权限提升的提示 2.3 工具枚举 LXD …

Electron使用electron-builder打包时下载electron失败或慢的解决方案

问题 在初次运行打包命令electron-builder的时候,会下载一些依赖,依赖不大,但问题是会一直卡着解决办法 1.下载electron-v31.1.0-win32-x64文件失败 解决办法:直接在淘宝的文件库下载对应版本和打包平台的文件 下载完成后放在C:\Users\Administrator\AppData\Local\electro…

同花顺数据爬取

请求获取数据 import requestsurl = https://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/2/ajax/1/headers = {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 }respon…

第三次博客作业

前言 这次作业是在后面新的大作业上进行了两次迭代。 1.第七次大作业 这次大作业是模拟家居电路。设备总共分为两个大类:控制设备和受控设备。控制设备有开关,分档调速器,连续调速器,还有这次迭代增加的互斥开关。这些控制设备除了为了保护电路的互斥开关有电阻外,其余均无…

2024年图灵出品的150页《大模型应用开发极简入门:基于GPT-4和ChatGPT》高清PDF下载,小白必备实战指南

本书为大模型应用开发极简入门手册,为初学者提供了一份清晰、全面的“可用知识”,带领大家快速了解GPT-4和ChatGPT的工作原理及优势,并在此基础上使用流行的Python编程语言构建大模型应用。通过本书,你不仅可以学会如何构建文本生成、问答和内容摘要等初阶大模型应用,还能…

MoveIt 三大核心功能

1. 运动学求解,如KDL,Trac-IK, IK-Fast 2. 路径规划:OMPL, CHOMP,SBPL 3. 碰撞检测:FCL, PCD...

LLM大模型: 基于langchain+AutoGPT+向量数据库的Agent实现

钢铁侠都看过吧,男猪脚 tony 只需要语音说话给出指令,AI助手会完成所有的指令,期间完全不需要人干预了,全程自动化,看着是不是很科幻?很过瘾?现阶段,市面上所有的大模型核心功能还是问答,能准确回答用户的提问已经很不错了,那么问题来了:怎么根据用户的指令去干具体…

Deepspeed ZeRO系列算法原理+通信开销详解

原文: https://sumanthrh.com/post/distributed-and-efficient-finetuning/#zero-powered-data-parallelism

win或Liunx查询端口占用语句

查询端口占用语句win在cmd命令行输入命令:netstat -ano | findstr <端口号>Linux输入命令语句:使用netstat netsta -tulpn | grep <端口号>使用lsof lsof -i :<端口号>

点云分割网络---Point Transformer V1

PDF: 《Point Transformer》 CODE: https://github.heygears.com/POSTECH-CVLab/point-transformer 一、大体内容 Point Transformer基于自注意力网络实现网络模型的构建。通过设计针对点云的自注意力层,结合位置编码构建Transformer block,利用自注意力机制,实现包括语义分…

selenium使用记录(一)

一 前言 环境: window 10 python3.10 selenium 4.21 随便记录一些容易犯错或理解错误或比较有意思的一些点 二 内容 1 关于驱动webdiver的下载使用 以前通常是,根据浏览器的版本下载好合适的浏览器驱动到本地电脑,然后使用的时候配置好驱动路径 如下: chromedriver_path…

Google X开源抓取机械臂,无需人工标注就能一眼找到目标零件

机械臂常见,但你见过这么聪明的吗? 从工作台上一眼找到合适的螺母、稳稳拿住。 再送到目标螺杆上,整个动作一气呵成: 即使是相似度极高的两个部件,也能准确区分并“揪”出正确的那个: 要知道,平时我们自己做实验、或是拼装没见过的机械零件时,面对各个相似的零件都可…

生物力学考前补天 (╥_╥)

简答题 能量货币 (1) 细胞中的“能量货币”有哪几种主要形式?最常见的“能量货币”是什么?磷酸根所携带的能量(类似的有鸟苷三磷酸GTP等)。 NADH(或其类似物NADPH):可转移的高能电子形式携带的还原电位(“氧化自己,还原别人”;转移两个电子来还原被氧化的有机化合物;失去…

cython 笔记

数据类型# bool 类型 // bool_type_ptactice.pyx cdef bint a = 123 # 非0 为 真 , 0 为假 cdef bint b = -123 cdef bint c = 0 py_a = a # cdef 定义的内容没法直接在python中直接引用 py_b = b py_c = c// main.py import pyximport pyximport.install(language_level=3…

扫描版PDF目录制作指南

目前网上找到的扫描版的电子书往往没有目录,这使得阅读变得非常困难。本文总结我的经验,介绍快速制作扫描版 PDF 目录的方法,以便更轻松地阅读扫描版电子书。 本文首先介绍手动制作目录的方法,之后介绍如何利用 AI 帮助制作目录,接下来介绍了没有目录页的扫描版 PDF 的解决…

Ros - moveit - 三位模型导出URDF

1. 以UR3机器人为例, 先设计solidwork模型, 下载并安装sw_urdf_expoter 插件: 2. 下载机器人模型文件,加载进solidworks:插入基准轴: 一共6个旋转轴: 设置好旋转轴后,接下来,导出URDF文件: 配置URDF:将link加进来: 点击“Preview and Export”进行自动计算旋转轴…

为什么useEffect的第一个参数不能用异步函数

最近面试遇到了这个问题两次了,面试官: useEffect第一个参数可不可以用异步函数? 我们先来看看用了异步函数会报什么错报这个错的原因是因为async 会返回一个promise函数,而clean()函数不能是异步的 。 先来看看clean()函数的执行时机: 首次渲染不会进行清理,会在下一次渲…