失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 面向对象3-析构函数和私有属性

面向对象3-析构函数和私有属性

时间:2018-12-26 05:48:18

相关推荐

面向对象3-析构函数和私有属性

1 析构函数:在实例释放,销毁的时候自动执行的。通常用于做一些收尾工作,如关闭一些数据库链接,关闭一些打开的临时文件等。释放内存。

Python的自动回收机制:隔一段时间,Python会扫描内存中那些没有被变量引用的值(有没有门牌号),如果没有被任何一个变量引用的话,就会自动删除。

class Person:cn="China"def __init__(self,name,age):self.name=nameself.age=agedef got_shot(self):print("ah...,I got shot...")def __del__(self): #析构函数,不能传任何参数print("彻底玩完了,析构函数执行")p1=Person('Lily',22)p1.got_shot()p2=Person('Jack',22)p2.got_shot()

执行结果:

ah...,I got shot...

ah...,I got shot...

Lily彻底玩完了,析构函数执行

Jack彻底玩完了,析构函数执行

2.用del主动释放内存, del 删除的是变量名(门牌号)。不是内存。当发现某个变量没有被引用时(没有门牌号了),这块内存才会被清除。

class Person:cn="China"def __init__(self,name,age):self.name=nameself.age=agedef got_shot(self):print("ah...,I got shot...")def __del__(self): #析构函数,不能传任何参数print("%s彻底玩完了,析构函数执行"%self.name)p1=Person('Lily',22)p1.got_shot()del p1p2=Person('Jack',22)p2.got_shot()

运行结果:

ah...,I got shot...

Lily彻底玩完了,析构函数执行

ah...,I got shot...

Jack彻底玩完了,析构函数执行

3.私有属性:通过p1.age可以任意修改P1的年纪,现在想办法使它变成一个私有属性。

私有属性和私有方法一样,都是在前面加两个小下划线就可以了。

__self.name=name

__got_shot(self):

class Person:cn="China"def __init__(self,name,age):self.name=nameself.age=agedef got_shot(self):print("ah...,I got shot...")p1=Person('Lily',22)p1.age=23print(p1.age)p2=Person('Jack',22)

把age改成私有属性以后,居然还可以正常赋值以及执行。郁闷啊啊啊啊啊啊啊啊啊啊-------------------,已经通过博问解决。参照最下面的截图。

class Person:cn="China"def __init__(self,name,age):self.name=nameself.__age=agedef got_shot(self):print("ah...,I got shot...")p1=Person('Lily',22)p1.__age=23print(p1.__age)p2=Person('Jack',22)

运行结果:

23

4.如何从外部访问私有属性:

class Person:cn="China"def __init__(self,name,age):self.name=nameself.__age=agedef got_shot(self):print("ah...,I got shot...")p1=Person('Lily',22)#p1.__age=23print(p1.__age)p2=Person('Jack',22)

运行结果:

Traceback (most recent call last):

File "C:/abccdxddd/Oldboy/Py_Exercise/Day6/aaa.py", line 11, in <module>

print(p1.__age)

AttributeError: 'Person' object has no attribute '__age'

那么怎么样从外部去访问私有属性呢?在内部定义了一个方法 show_status(self):

class Person:cn="China"def __init__(self,name,age):self.name=nameself.__age=agedef got_shot(self):print("ah...,I got shot...")def show_status(self):print("age is: %s"%self.__age)p1=Person('Lily',22)p1.show_status()

运行结果:

age is: 22

关于私有属性的博问:/q/97004/

如果觉得《面向对象3-析构函数和私有属性》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。