Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Python】构造函数、析构函数与可变参数传递

【Python】构造函数、析构函数与可变参数传递

作者头像
用户7886150
修改于 2020-12-21 03:02:04
修改于 2020-12-21 03:02:04
1.4K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Python中的析构函数

在《【PythonWindows版本的Python开发环境的配置,Helloworld,Python中文问题,输入输出、条件、循环、数组、类》(点击打开链接)虽然一定程度上介绍了Python中类的用法,然而并没有涉及到类中最重要的两个东西,一个是构造函数,另一个是析构函数。 

构造函数的作用是保证每个对象的数据成员都有何时的初始值。 

析构函数的作用是回收内存和资源,通常用于释放在构造函数或对象生命期内获取的资源。 

python中的类有两个特殊方法,一个是“__init__”构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数。那么我们就可以把要先初始化的属性放到这个函数里面。另一个“__del__”就是析构函数了,当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间。  

如下的一个Python程序: 

#-*-coding:utf-8-*-

class C:#注,python的self等于其它语言的this

    name_list=[];

    def __init__(self,*name_list):#name_list本质是一个数组

        self.name_list=name_list;

        print "构造函数执行";

    def __del__(self):

        print "析构函数执行";

    def sayHello(self):

        print "hello:",

        for name in self.name_list:#然而,在类函数中,调用类成员,要指代类成员,不带这个self不行

            print name,

        print;

#主程序

c=C("呵呵","ssss",1);

c.sayHello();

 主程序很简单,就新建类C的实例c,之后就调用其中的普通类函数sayHello。

在构造类C的实例c的时候,还用到Python的可变参数传递。 

所谓的Python的可变参数传递是指:一般定义一个函数的时候,必须要预先定义这个函数需要多少个参数(或者说可以接受多少个参数),但是也有在定义函数的时候,不能知道参数个数的情况(想一想C语言里的printf函数),在Python里,带*的参数就是用来接受可变数量参数的。 

用法与《【Java】JDK1.5以后新型的泛型参数传递方法Object...args》(点击打开链接)其实是一样的,如上的程序,构造类C的实例c的时候,传了3个程序给构造函数的*name_list接受,name_list本质是一个list容器,也就是可变长数组,之后利用类似this.x=x的形式给类成员的name_list[]赋值,将传过来的所有参数放入name_list[]里面。 

之后在普通的sayHello方法,在python中需特定利用self.name_list[]来指代自己的类成员name_list[],否则,单写name_list[],python只能会找这个sayHello及其形式参数中的name_list[],不像其它语言会自动自己从整个类中找。 

析构函数的话,在遇到类似del c或者其所在的作用域完成时python自己回收这个类时执行。在主函数没有del c,c所在的作用域在主函数中,因此整个python跑完之前释放c,在c释放之前执行其析构函数__del__。 

因此,程序的运行结果如下:

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java物联网开发(一) —— MQTT协议
官方文档传送门 mqtt官网 mqtt中文网 mqtt 3.1.1 英文文档 mqtt 5.0 英文文档 b站mqtt教程
时间静止不是简史
2021/08/12
9.4K0
Java物联网开发(一)  —— MQTT协议
MQTT–入门「建议收藏」
 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
全栈程序员站长
2022/08/25
1.1K0
MQTT–入门「建议收藏」
MQTT协议,终于有人讲清楚了
大家好,我是小麦,最近做了一个物联网的项目,顺便总结一下MQTT协议。大家都知道,MQTT协议在物联网中很常用,如果你对此还不是很了解,相信这篇文章可以带你入门。
wenzid
2021/07/20
21.9K0
MQTT协议,终于有人讲清楚了
物联网常用协议:MQTT、CoAP、LwM2M、HTTP、LoRaWAN和NB-IoT
物联网,即物的互联网,属于互联网的一部分。物联网将互联网的基础设施作为信息传递的载体,即现代的物联网产品一定是“物”通过某种方式接入了互联网,而“物”通过互联网上传/下载数据,以及与人进行交互。
不脱发的程序猿
2021/01/20
12.3K0
13 目前主流的MQTT 3.1.1和MQTT 5.0协议介绍
MQTT(Message Queuing Telemetry Transport)协议是一种轻量级的、基于发布/订阅模式的消息传输协议,专为在硬件性能受限、网络状况不佳的远程设备和环境中运行而设计。MQTT协议工作在TCP/IP协议族上,通过最小化传输开销和协议交换来有效减少网络流量,使其特别适用于物联网(IoT)领域中的设备间通信。
DS小龙哥
2025/05/27
1550
一文了解MQTT协议
我们之前已经说了这个SSL 和 TCP/IP 协议了,我们今天就来详细的说说这个 MQTT 协议,因为很多消息现在都是支持 MQTT 协议的,比如 RabbitMQ ,还有 Kafka 等,今天我们就来详细的介绍 MQTT 协议到底是个什么。
Java极客技术
2022/12/04
4.2K0
一文了解MQTT协议
浅谈物联网开发最热协议—MQTT协议
最近在在物联网相关项目的开发的时候,有用到物联网常用的通信协议--MQTT协议,刚开始对这一块的知识并不是很了解,所以在这里一边学习一边记录,有不合理的地方还希望能多多指正。
灰小猿
2020/09/23
2K0
浅谈物联网开发最热协议—MQTT协议
MQTT协议学习总结
海量的设备接入和设备管理对网络带宽、通信协议以及平台服务架构都带来了很大挑战。对于物联网协议来
叫我阿杰好了
2022/11/07
3.9K0
MQTT协议学习总结
MQTT协议
MQTT协议简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。 虽然HTTP是网页的事实标准,不过机器之间(Machine-to-Machine,M2M)的大规模沟通需要不同的模式:之前的请求/回答(Request/Response)模式不再合适,取而代之的是发布/订阅(Publish/Sub
大数据和云计算技术
2018/03/08
5.6K0
MQTT协议
物联网项目:充电桩项目实战~
MQTT,全称Message Queuing Telemetry Transport,即消息MQTT,即消息队列遥测传输,是一种基于客户端-服务器的消息发布/订阅传输协议。这种协议的设计思想是轻量、开放、简单和规范,因此易于实现。
田维常
2023/11/15
1.8K0
物联网项目:充电桩项目实战~
MQTT 协议基本介绍
MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的“轻量级”消息协议,由 IBM 发布。
sunsky
2021/06/09
3.8K0
MQTT 协议基本介绍
C语言代码封装MQTT协议报文,了解MQTT协议通信过程
MQTT是一种轻量级的通信协议,适用于物联网(IoT)和低带宽网络环境。它基于一种“发布/订阅”模式,其中设备发送数据(也称为 “发布”)到经纪人(称为MQTT代理),这些数据被存储,并在需要时被转发给订阅者。这种方式简化了网络管理,允许多个设备在不同的网络条件下进行通信(包括延迟和带宽限制),并支持实时数据更新。它是开放的,可免费使用并易于实施。
DS小龙哥
2023/05/27
2.7K0
C语言代码封装MQTT协议报文,了解MQTT协议通信过程
mqtt服务器搭建(ubuntu)
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的”轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
全栈程序员站长
2022/09/06
7.9K0
mqtt服务器搭建(ubuntu)
为什么最近每份 Android 简历都说 “熟悉 MQTT 协议”?
MQTT 是一种基于发布 - 订阅模型的消息传递协议,在物联网和移动应用有较广泛的应用。如果你的目标是冲击中高级工程师岗位,MQTT 或许是一个不错的亮点。最近,我还发现很多候选人会在简历中写自己 “熟悉 MQTT 协议”,但多数人只是停留在了解或用过的程度。
用户9995743
2022/12/22
4.5K0
为什么最近每份 Android 简历都说 “熟悉 MQTT 协议”?
MQTT 协议入门:基础知识和快速教程
本文是 MQTT 协议的入门指南,提供了实用的代码示例。物联网和 MQTT 的初学者可以通过本文掌握 MQTT 的基本概念,快速开启 MQTT 服务和应用的开发。
EMQ映云科技
2023/06/27
1.5K0
MQTT 协议入门:基础知识和快速教程
Tsung MQTT协议简介及MQTT xml文档配置介绍
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上。
授客
2019/09/11
2.2K0
Tsung MQTT协议简介及MQTT xml文档配置介绍
[ 物联网篇 ] - MQTT协议是如何工作的 ?
此外,它被设计为轻量级消息传递协议,它使用发布/订阅操作在客户端和服务器之间交换数据。此外,它的小尺寸,低功耗,最小化数据包和易于实现使该协议成为“机器到机器”或“物联网”世界的理想选择。
程序手艺人
2022/05/10
3K0
[ 物联网篇 ] -  MQTT协议是如何工作的 ?
MQTT 详解
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
高广超
2019/05/20
4.9K0
物联网协议的王者:MQTT
MQTT 最初由 Andy Stanford-Clark 博士和 Arlen Nipper 博士于 1999 年创建,用于通过卫星连接石油管道遥测系统。
网络技术联盟站
2023/03/05
1K0
物联网协议的王者:MQTT
springboot + rabbitmq 做智能家居,我也没想到会这么简单
前一段有幸参与到一个智能家居项目的开发,由于之前都没有过这方面的开发经验,所以对智能硬件的开发模式和技术栈都颇为好奇。
程序员小富
2020/06/21
2.5K1
springboot + rabbitmq 做智能家居,我也没想到会这么简单
相关推荐
Java物联网开发(一) —— MQTT协议
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档