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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python基础(一)
由于煮波已经学过了C和C++,而且了解过java的语法,已经建立了语言的整体框架,所以学习python语法就不像学C++一样系统的一点一点的学习了,学习python语法,我就根据日常代码中遇到的或者是从C++代码中想到了在python中应该是什么场景来探讨python的相应知识;
啊QQQQQ
2025/04/10
400
【C++11】移动赋值 | 新的类功能 | 可变参数模板
C++98中 没有移动赋值和移动构造 ,只有参数为左值 的赋值重载(operator=)和拷贝构造
lovevivi
2023/10/17
2680
【C++11】移动赋值 | 新的类功能 | 可变参数模板
【c++11】可变参数模版
最后重要的是前4个,后两个用处不大。默认成员函数就是我们不写编译器会生成一个默认的。 C++11 新增了两个:移动构造函数和移动赋值运算符重载
用户11029103
2025/01/24
680
【c++11】可变参数模版
Python类的构造函数__init__(self)和析构函数__del__详解
__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。一般用来对实例的属性进行初使化,如果不提供,Python 会给出默认的__init__方法。
王大力测试进阶之路
2019/10/25
5K0
【C++】构造函数与析构函数
我们通常的函数是都需要有返回值的,但是有这样一类函数不需要返回值,而且函数名必须与类名相同(类中的特有的函数),这就是构造函数。
啊QQQQQ
2024/11/19
1420
【C++】构造函数与析构函数
七、构造函数与析构函数
在C++中,构造函数是一种特殊的成员函数,它用于初始化类的对象。当创建类的对象时,构造函数会被自动调用。构造函数的名字与类的名字相同,并且没有返回类型(即使是void也没有)。
用户11332765
2024/10/28
2400
Python进阶-继承
Python 类在定义时可以在小括号中指定基类,所有 Python 类都是 object 类型的子类。
小团子
2019/07/18
5560
Python进阶-继承
Python进阶-面向对象-中
构造函数是一种特殊的类成员方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值。Python 中的类构造函数用 __init__ 命名,为 MyClass 添加构造函数方法,并实例化一个对象。
小团子
2019/07/18
4020
Python进阶-面向对象-中
【C++】C++11的新特性 --- lambda表达式 ,新的类功能,模块的可变参数 , emplace系列接口
C语言解决自定义排序问题时,会使用函数指针;C++我们解决排序问题时,一般都会使用仿函数,通过自定义类来实现自定义比较大小。如果涉及的比较排序很多,就要写出很多类,比较繁琐。通 今天的lambda表达式也是一种解决办法。我们来看:这是我们传统的仿函数写法
叫我龙翔
2024/07/29
1360
【C++】C++11的新特性 --- lambda表达式 ,新的类功能,模块的可变参数 , emplace系列接口
C++11『右值引用 ‖ 完美转发 ‖ 新增类功能 ‖ 可变参数模板』
自从C++98以来,C++11无疑是一个相当成功的版本更新。它引入了许多重要的语言特性和标准库增强,为C++编程带来了重大的改进和便利。C++11的发布标志着C++语言的现代化和进步,为程序员提供了更多工具和选项来编写高效、可维护和现代的代码
北 海
2023/11/17
6410
C++11『右值引用 ‖ 完美转发 ‖ 新增类功能 ‖ 可变参数模板』
C++学习————第五天(构造函数 析构函数 拷贝构造函数)
关于后面三个默认函数:https://blog.csdn.net/island1314/article/details/137756026?spm=1001.2014.3001.5502
IsLand1314
2024/10/15
1660
C++学习————第五天(构造函数 析构函数 拷贝构造函数)
【说站】python析构函数的常见应用
以上就是python析构函数的常见应用,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/23
4520
【说站】python析构函数的常见应用
细节见真知
Python 虽然简单易学,但要真正掌握和精通也不是件容易的事情,比如本文将要分享的这些有趣的特性,如果你一眼就看穿了问题的本质,说明你已经非常精通了。如果没有那就多看几次,细节见真知,敲敲代码验证下,对于提升 Python 编程技能,非常有效。
somenzz
2020/11/30
4670
【C++】构造函数和析构函数
说明:C++把类型分成内置类型(基本类型)和自定义类型。内置类型就是语言提供的原生数据类型如:int/char/double/指针等,自定义类型就是我们使用class/struct等关键字自己定义的类型。
用户11328191
2024/10/23
2060
【C++】构造函数和析构函数
从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字
文章主要讲述了C++构造函数、析构函数、拷贝构造函数、赋值运算符以及初始化语句的区别和用法,并介绍了如何在C++中进行对象初始化。
s1mba
2017/12/28
1.8K0
从零开始学C++之构造函数与析构函数(一):构造函数、析构函数、赋值与初始化、explicit关键字
关于构造函数与析构函数的分享
创建复杂的类类型的对象时,可能需要对一些数据或者对象中需要使用的资源进行一些初始化操作,比如设置成员的默认值,打开数据库,打开文件,等等,而这些准备工作,就可以放在类的构造函数中进行。
用户7053485
2020/03/12
1.4K0
【C++11】可变参数模板/新的类功能/lambda/包装器--C++
成员变量声明时给缺省值是给初始化列表用的,如果没有显示在初始化列表初始化,就会在初始化列表用这个却绳子初始化,这个我们在类和对象部分讲过了,点击跳转,可以查看我的主页哦.
小志biubiu
2025/02/27
1650
【C++11】可变参数模板/新的类功能/lambda/包装器--C++
【C++】构造函数与析构函数用途 ( 代码示例 - 构造函数与析构函数用途 )
在 C++ 语言中 , " 构造函数 " 和 " 析构函数 " 都是 C++ 类中的 特殊函数 , 分别用于
韩曙亮
2023/10/15
2980
【C++】构造函数与析构函数用途 ( 代码示例 - 构造函数与析构函数用途 )
C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数
在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。
南桥
2024/09/10
1800
C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数
变参函数和可变参数宏
前言:此文关于宏的内容摘抄自裸机思维公众号的"为宏证明"系列文章,本文对原文内容做了大量精简,所以难免会有晦涩难懂的地方,想要更深入了解宏的用法,还请移步到裸机思维。
AIoT-KK
2023/02/09
2.2K0
变参函数和可变参数宏
推荐阅读
相关推荐
Python基础(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档