Python:析构函数,封装

server/2025/3/15 16:16:37/

析构函数:

删除对象的时候,解释器会默认调用__del__()方法:

class Person:def __init__(self):print("123")def __del__(self):print("delete")
p=Person()
print("the last")

结果为:

123
the last
delete#正常情况下不会调用__del__(),对象执行结束后,系统会自动调用__del__()

class Person:def __init__(self):print("123")def __del__(self):print("delete")
p=Person()
del p#语句执行时内存会立即被回收,会调用对象本身的__del__()方法
print("the last")

结果为:
123
delete
the last

__del__()主要表示程序快或者函数已经全部执行结束

封装:

隐藏对象中一些不希望被外部所访问到的属性或者方法:

class Person:name="lihailu"
p=Person()
print(p.name)
Person.name='liming'
print(Person.name)

结果为:
lihailu
liming
 

隐藏属性(私有权限)只允许在类的内部使用,无法通过对象访问

在直属名或者方法名前面加上两个下划线__

class Person:name="lihailu"__age=18#隐藏属性def introduce(self):print(f"{self.name}的年龄是{self.__age}")#在实例方法中访问类属性和隐藏属性
p=Person()
print(p.name)
#print(p.__age)
#隐藏属性实际上是将名字修改为:_类名__属性名
print(p._Person__age)
p._Person__age=20#实现隐藏属性修改,一般不使用(不正规)
print(p._Person__age)#第一种方法
#第二种方法,在类的内部访问,推荐使用
p.introduce()

私有属性(方法):

xxx:如果是类中定义的,则类可以在任意地方使用

__xxx:双下划线开头,如果定义在类中,无法在外部直接访问,子类不会继承,要访问只能通过间接的方式,另一个py文件中通过from xxx import *导入的时候,无法导入,一般是Python中的魔法方法或属性,都是有特殊含义和功能的,自己不要轻易定义

_xxx:单下划线开头:如果定义在类中,外部可以使用,子类也可以继承,另一个py文件中通过from xxx import *导入的时候,同样无法导入,一般是为了避免与Python关键字冲突而采用的命名方法

class Man:def __play(self):print("play")def funa(self):print("实例方法")#Man.__play(self)#在实例方法中调用私有方法(不推荐,比较繁琐)2self.__play()
ma=Man()
ma.funa()
#ma.__play()#没有这个方法
#ma._Man__play()#1

私有方法:

class Girl:def _buy(self):#私有方法print("buy")
girl=Girl()
girl._buy()#需要加下划线

http://www.ppmy.cn/server/175199.html

相关文章

Python 与 sklearn 库:轻松构建 KNN 算法双版本

引言​ k 最近邻(kNN)算法是一种简单而强大的机器学习算法,常用于分类和回归任务。在 Python 中,借助 scikit - learn(sklearn)库,我们可以轻松实现 kNN 算法。本文将为大家介绍两种使用 sklea…

阿里巴巴发布 R1-Omni:首个基于 RLVR 的全模态大语言模型,用于情感识别

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

FPGA中级项目1——IP核(ROM 与 RAM)

FPGA中级项目1——IP核(ROM 与 RAM) IP核简介 在 FPGA(现场可编程门阵列)设计中,IP 核(Intellectual Property Core,知识产权核)是预先设计好的、可重用的电路模块,用于实…

Git提交前时间检查

为了防止在本地看日志的时候,由于本地时间被修改,导致日志的时间存在非正确时间。通过以下脚本在提交前进行时间验证,只有是正确的时间才可以提交。 使用方法如下: 复制如下脚本,命名为 pre-commit ,放到 …

【存储中间件】Redis核心技术与实战(一):Redis入门与应用(高级数据结构:Bitmaps、HyperLogLog、GEO)

文章目录 Redis入门与应用Redis高级数据结构Bitmaps操作命令setbit 设置值getbit 获取值bitcount 获取Bitmaps指定范围值为1的个数bitop Bitmaps 间的运算bitpos 计算Bitmaps中第一个值为targetBit 的偏移量 Bitmaps优势面试题和场景传统数据结构的不足 布隆过滤器布隆过滤器简…

Unix 域套接字(本地套接字)

Unix 域套接字(Unix Domain Sockets),也称为本地套接字(Local Sockets),是一种用于同一主机上进程间通信(IPC)的机制。Unix 域套接字提供了一种高效的进程间通信方式,它利…

为什么List、Set集合无法在遍历的时候修改内部元素

以常用集合ArrayList为例,ArrayList 在遍历过程中无法直接修改内部元素的结构(例如通过 remove() 或 add() 方法修改元素),是因为 遍历的过程中修改结构 可能会导致 不一致的行为、并发修改异常 或 逻辑错误。 注意:和…

【AWS入门】2025 AWS亚马逊云科技账户注册指南

【AWS入门】2025 AWS亚马逊云科技账户注册指南 A Guide To Register a New account on AWS By JacksonML 0. AWS亚马逊云科技简介 Amazon Web Service(AWS) 即亚马逊云科技,其在全球Cloud Computing(云计算)市场占有最为重要的地位。 AWS连续13年被Gartner评为…