Python 官方文档:入门教程 => 点击学习
析构函数: 在实例释放、销毁的时候自动执行的,通常用于做一些收尾工作, 如关闭一些数据库连接,关闭打开的临时文件析构函数,是无法传参的class Role(object):  
析构函数:
在实例释放、销毁的时候自动执行的,通常用于做一些收尾工作, 如关闭一些数据库连接,关闭打开的临时文件
析构函数,是无法传参的
class Role(object):
def __init__(self, name):
self.name = name
#析构函数
def __del__(self):
print('%s 彻底死了...' % self.name)
def shot(self):
print("shooting...")
r1 = Role('jack')
执行输出:
jack 彻底死了...
现在还没有干啥事情,怎么就执行了呢?
再执行一个类里面的函数
class Role(object):
def __init__(self, name):
self.name = name
#析构函数
def __del__(self):
print('%s 彻底死了...' % self.name)
def shot(self):
print("shooting...")
r1 = Role('jack')
r1.shot()
执行输出:
shooting...
jack 彻底死了...
当程序退出的时候,实例就销毁了,所以最后执行了析构函数。
私有属性
外部不允许直接访问和修改
比如将name变成私有属性,外部测试访问
class Role(object):
def __init__(self, name):
#私有属性
self.__name = name
def shot(self):
print("shooting...")
r1 = Role('jack')
print(r1.__name)
执行报错
AttributeError: 'Role' object has no attribute '__name'
变成私有属性,在变量名前面加双下划线就可以了。
那么想在外部获取这个值,怎么办呢?
虽然外部无法直接访问,但是在类里面,是可以访问的,定义一个方法,用来获取私有属性
class Role(object):
def __init__(self, name):
self.__name = name
def shot(self):
print("shooting...")
def show_name(self):
print('name: %s' % self.__name)
r1 = Role('jack')
print(r1.show_name())
执行输出:
name: jack
None
在类里面,也可以更改私有属性的值
class Role(object):
def __init__(self, name):
self.__name = name
def shot(self):
print("shooting...")
def show_name(self):
self.__name = "Tom"
print('name: %s' % self.__name)
r1 = Role('jack')
print(r1.show_name())
执行输出:
name: Tom
None
定义私有方法,和私有属性是一样的,前面加双下划线即可。
class Role(object):
def __init__(self, name):
self.__name = name
#私有方法
def __shot(self):
print("shooting...")
def show_name(self):
self.__name = "Tom"
print('name: %s' % self.__name)
r1 = Role('jack')
print(r1.__shot())
执行报错:
AttributeError: 'Role' object has no attribute '__shot'
--结束END--
本文标题: python 面向对象之析构函数
本文链接: https://www.lsjlt.com/news/179016.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0