当前位置: 首页 > news >正文

Python学习笔记--私有属性、构造方法、析构方法、常用内置方法

目录

私有属性

构造方法

析构方法

常用内置方法


私有属性

1. 私有属性是指在类内可以直接访问、而在类外无法直接访问的属性

2. Python中规定,在定义类时,如果一个类属性名是以__(两个下划线)开头,则该类属性为私有属性

举例

class Student:name = '未知'__id = '未知'def SetInfo(self, newname, newid):self.name = newnameself.__id = newiddef PrintInfo(self):print("姓名:%s, 身份证号:%s"%(self.name, self.__id))if __name__ == '__main__':stu = Student()stu.SetInfo("小明", "25256326")stu.PrintInfo()# 错误写法:print("身份证号:%s" % (stu.__id))# 正确写法:print("身份证号:%s" % (stu._Student__id))

注:实际上,Python中并不存在无法访问的私有属性。如果在类中定义了一个私有属性,则在类外访问该私有属性时需要在私有属性名前加上“_类名”,即可正常运行。

print("身份证号:%s" % (stu._Student__id))

构造方法

1. 构造方法是Python类中的内置方法之一,它的方法名为__init__,在创建一个类对象时会自动执行,负责完成新创建对象的初始化工作。

只有一个参数的构造方法示例

class Student:def __init__(self):print("构造方法被调用")self.name = "未知"def PrintInfo(self):print("姓名: %s"%self.name)if __name__ == '__main__':stu = Student()  # 创建Student类对象stu,自动执行构造方法stu.PrintInfo()# 输出
'''
构造方法被调用
姓名: 未知
'''

带默认参数的构造方法示例

class Student1:def __init__(self, name = '未知'):  #定义构造方法print("构造方法被调用")self.name = name  #将self对应对象的name属性赋为形参name的值def PrintInfo(self):print("姓名:%s"%self.name)if __name__ == '__main__':stu1 = Student1()stu2 = Student1("小明")stu1.PrintInfo()stu2.PrintInfo()# 输出
'''
构造方法被调用
构造方法被调用
姓名:未知
姓名:小明
'''

析构方法

1. 析构方法是类的另一个内置方法,它的方法名为__del__,在销毁一个类对象时会自动执行,负责完成待销毁对象的资源清理工作,如关闭文件等。

注:类对象销毁有如下三种情况:

(1)局部变量的作用域结束

(2)使用del删除对象

(3)程序结束时,程序中的所有对象都将被销毁

class Student:def __init__(self, name):self.name = nameprint("姓名为%s的对象被创建"%self.name)def __del__(self):print("姓名为%s的对象被销毁"%self.name)def func(name):stu = Student(name)if __name__ == '__main__':stu1 = Student("小明")stu2 = Student("马红")stu3 = stu2del stu2func("张刚")del stu3stu4 = Student("刘健")# 输出
'''
姓名为小明的对象被创建
姓名为马红的对象被创建
姓名为张刚的对象被创建
姓名为张刚的对象被销毁
姓名为马红的对象被销毁
姓名为刘健的对象被创建
姓名为小明的对象被销毁
姓名为刘健的对象被销毁
'''

注:如果多个变量对应同一片内存空间,则只有这些变量都删除后才会销毁这片内存空间中所保存的对象,也才会自动执行析构方法

1. 判断题

析构方法可以没有形参。

A.正确

B.错误

正确答案:B

解析:析构方法应有一个形参self,对应正在销毁的对象。

常用内置方法

1. __str__

调用str函数对类对象进行处理时或者调用Python内置函数format()和print()时自动执行,__str__方法的返回值必须是字符串

class Complex:def __init__(self, real, image):self.real = realself.image = imagedef __str__(self):return str(self.real)+'+'+str(self.image)+'i'if __name__ == '__main__':c = Complex(3.2, 5.3)print(c)#输出
'''
3.2+5.3i
'''

2. 比较运算的内置方法

内置方法功能描述
__gt__(self, other)进行self>other运算时自动执行
__lt__(self, other)进行self<other运算时自动执行
__ge__(self, other)进行self>=other运算时自动执行
__le__(self, other)进行self<=other运算时自动执行
__eq__(self, other)进行self==other运算时自动执行
__ne__(self, other)进行self!=other运算时自动执行

示例

class Student:def __init__(self, name, age):self.name = nameself.age = agedef __le__(self, other):return self.age < other.ageif __name__ == '__main__':stu1 = Student("小明", 19)stu2 = Student("小红", 20)print("马红的年龄小于等于小明的年龄:", stu2 <= stu1)# 输出
'''
False
'''

 判断题

1. __str__方法的返回值可以是整数。

A.正确

B.错误

正确答案:B

解析:__str__方法返回的数据必然是字符串。

相关文章:

Python学习笔记--私有属性、构造方法、析构方法、常用内置方法

目录 私有属性 构造方法 析构方法 常用内置方法 私有属性 1. 私有属性是指在类内可以直接访问、而在类外无法直接访问的属性 2. Python中规定&#xff0c;在定义类时&#xff0c;如果一个类属性名是以__&#xff08;两个下划线&#xff09;开头&#xff0c;则该类属性为私…...

4章8节:用R做数据重塑,行列命名和数据类型转换

在R语言中,行列命名和数据类型转换是数据处理中的两个基础性操作。它们不仅对数据的可读性和组织性至关重要,而且在执行数据分析、模型构建和结果解释时也扮演着重要的角色。 一、行和列命名 在数据科学和统计分析中,命名是组织和管理数据的一个重要部分。尤其是在处理复杂…...

浏览器发出请求到响应的过程

客户端发起请求&#xff1a;用户输入URL并回车&#xff0c;浏览器解析URL&#xff0c;生成HTTP请求。 DNS解析&#xff1a;浏览器查看本地hosts文件是否有域名的IP地址映射&#xff0c;如果没有则向DNS服务器发起解析请求&#xff0c;获取域名对应的IP地址。 建立TCP连接&…...

eNSP 华为划分VLAN

SW1&#xff1a; <Huawei>system-view [Huawei]sysname SW1 [SW1]VLAN batch 10 20 //批量划分vlan [SW1]interface GigabitEthernet0/0/1 [SW1-GigabitEthernet0/0/1]port link-type access //设置为access口&#xff0c;access口允许单个vlan通过 [SW1-GigabitEth…...

公用事业公司签署大规模电力供应协议

随着人工智能技术的迅猛发展&#xff0c;美国公用事业公司与数据中心运营商之间的电力供应协议数量显著增加&#xff0c;为未来几季度的销售和利润增长奠定了基础。根据高盛今年5月发布的一份报告&#xff0c;到2030年&#xff0c;数据中心的发电量预计将占美国总发电量的8%&am…...

C语言 | Leetcode C语言题解之第341题扁平化嵌套列表迭代器

题目&#xff1a; 题解&#xff1a; struct NestedIterator {int *vals;int size;int cur; };void dfs(struct NestedIterator *iter, struct NestedInteger **nestedList, int nestedListSize) {for (int i 0; i < nestedListSize; i) {if (NestedIntegerIsInteger(neste…...

冷知识:编程第一人是位伟大的女性

冷门智慧&#xff1a;阿达编程先驱的传奇人生揭秘在线播放免费听 - 喜马拉雅手机版欢迎收听由主播壹道徽为您带来的“冷门智慧&#xff1a;阿达编程先驱的传奇人生揭秘”精彩有声内容&#xff0c;该音频时长5分18秒&#xff0c;已被收听1062次&#xff0c;用户嘎嘎呗嘎嘎评价说…...

Python爬虫使用实例

IDE&#xff1a;大部分是在PyCharm上面写的 解释器装的多 → 环境错乱 → error&#xff1a;没有配置&#xff0c;no model 爬虫可以做什么&#xff1f; 下载数据【文本/二进制数据&#xff08;视频、音频、图片&#xff09;】、自动化脚本【自动抢票、答题、采数据、评论、点…...

主成分分析(PCA)

1 主成分分析简介 主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;&#xff0c; 将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法。主成分分析是由卡尔皮尔逊(Karl Pearson)于1901年发明的。通过维度约减的方式将高维度…...

python实现生命游戏

“生命游戏”&#xff08;Conway’s Game of Life&#xff09;是由数学家约翰康威提出的一种零玩家游戏。它是一个细胞自动机&#xff0c;由一组简单的规则决定每个细胞的状态。以下是用Python实现“生命游戏”的代码示例&#xff1a; Python代码实现 import numpy as np imp…...

基于vue框架的CIA报价平台的设计与实现1xv02(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,供应商,产品分类,产品信息,在线咨询,资质申请 开题报告内容 基于Vue框架的CIA报价平台的设计与实现 开题报告 一、选题背景 随着市场竞争的日益激烈&#xff0c;企业对于成本控制与效率提升的需求愈发迫切。在采购与供应链管理…...

【Kubernetes】k8s集群Pod控制器

目录 一.Pod控制器作用 二.Pod控制器类型 1.Deployment&#xff08;简称deploy&#xff09; ReplicaSet&#xff08;简称rs&#xff09; 2.StatefulSet&#xff08;简称sts&#xff09; 创建SatefulSet控制器 3.DaemonSet&#xff08;简称ds&#xff09; 4.Job 5.Cron…...

什么是NLP实体识别?

目录 1. 实体识别的基本概念 1.1 什么是实体识别&#xff1f; 1.2 实体识别的应用场景 2. 实体识别的常用方法 2.1 基于规则的方法 2.1.1 规则定义与模式匹配 2.2 基于机器学习的方法 2.2.1 特征工程与传统机器学习模型 2.3 基于深度学习的方法 2.3.1 神经网络模型 …...

掌握Jenkins自动化部署:从代码提交到自动上线的全流程揭秘

Jenkins自动化部署是现代软件开发中不可或缺的一部分&#xff0c;它不仅简化了代码的发布过程&#xff0c;还为整个团队带来了无与伦比的效率和协作力。想象一下&#xff0c;开发者们可以专注于编写高质量的代码&#xff0c;而不是为繁琐的手动部署所烦恼&#xff1b;测试人员能…...

糟糕界面集锦-控件篇09

目前我们还无法确定该把这个问题划到哪个类别中&#xff0c;但是如图所示&#xff0c;在一个列表框中只显示3 个项目无疑是愚蠢的。 这是微软的文件管理器提供的文件关联界面&#xff0c;用户需要把某一个特定类型的文件与一个应用程序关联时会弹出该对话框。如示例&#xff1a…...

喵喵蓝牙热敏打印机(下)

目录 前言一、电量、温度、缺纸检测1.电量检测2.针头温度检测3.缺纸检测 二、蓝牙APP通信打印1.蓝牙初始化2.APP通信打印 三、FreeRTOS任务整合 前言 喵喵蓝牙热敏打印机&#xff08;上&#xff09; 内容有点多&#xff0c;就分为了上下两篇。 一、电量、温度、缺纸检测 先启…...

软件测试第1章 软件测试是什么

目录​​​​​​​ 内容说明 一、软件测试与质量概览需要熟悉什么 二、如何理解质量保证 三、软件测试的误区-程序员和测试的关系 四、软件测试是什么&#xff1f; 五、软件测试的目的 六、软件测试与软件质量保证 七、软件测试的必要性 八、软件测试的基本概念分析 …...

【技术分享】 hysteria2从服务端到客户端部署教程

hysteria2从服务端到客户端部署教程 前言 在如今的网络环境中&#xff0c;尤其是涉及跨国访问的场景中&#xff0c;hysteria2作为一个新兴的传输协议工具&#xff0c;凭借其高效的传输能力和灵活的配置方式&#xff0c;受到了越来越多用户的青睐。本教程将带您一步步完成hyst…...

C++入门基础知识16

C 的关键字&#xff08;接上一篇博文&#xff01;&#xff01;&#xff01;&#xff09; 54. typeid 指出指针或引用指向的对象的实际派生类型。 55. typename typename&#xff08;类型名字&#xff09;关键字告诉编译器把一个特殊的名字解释成一个类型。在下列情况下必须对一…...

浏览器调试工具-Chrome Dev Tools

浏览器调试模式下的各个调试工具是常用的工具集&#xff0c;能够帮助开发者理解、调试和优化网页。 1.打开方式 直接在浏览器中按下F12键右键点击页面上的任一元素&#xff0c;选择“检查”&#xff08;Inspect&#xff09;在浏览器右上角点击菜单按钮&#xff0c;选择“更多…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...