析构函数:
在实例释放、销毁的时候自动执行的,通常用于做一些收尾工作, 如关闭一些数据库连接,关闭打开的临时文件
析构函数,是无法传参的
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'