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 p1
p2=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=23
print(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=23
print(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=23
print(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

关于私有属性的博问:https://q.cnblogs.com/q/97004/

转载于:https://www.cnblogs.com/momo8238/p/7250932.html

面向对象3-析构函数和私有属性相关推荐

  1. 面向对象(三、类私有属性和私有方法)

    目录 私有属性和私有方法 01. 应用场景及定义方式 02. 伪私有属性和私有方法(科普) 继承 01. 单继承 1.1 继承的概念.语法和特点 1) 继承的语法 2) 专业术语 3) 继承的传递性 ...

  2. python_day6_面向对象的介绍/构造函数/类变量和实例变量/析构函数/私有属性和私有方法/继承、多继承和继承实例/多态

    python_面向对象的介绍/构造函数/类变量和实例变量/析构函数/私有属性和私有方法/继承.多继承和继承实例/多态 在这里得感谢,老师Alex金角大王(路飞学城IT) Python(给兄弟们挂个

  3. 三. python面向对象(私有属性和私有方法 私有静态方法 私有类方法)

    一. 私有属性(封装) # 侠义 上的封装 面向对象的三大特性之一 # 属性 和 方法都隐藏起来 不让你看到 # 如果要让内部属性不被外部属性直接访问 在属性前加上两个下划线__ # 在python中 ...

  4. Python进阶-----面向对象2.0(特有属性和方法与私有属性和方法)

    目录 前言: 1.添加特有属性/方法 示例1:添加特有属性 示例2:添加特有方法 2.私有属性/方法 (1)私有化示例 (2) 私有化属性/方法可以在类的内部使用 (3)强制访问私有化属性/方法 (4 ...

  5. 第174天:面向对象——公有属性、私有属性和静态属性

    一.公有属性和私有属性 1 //对象构造函数 2 //私有属性好处: 安全 就类似闭包中的函数一样 减少污染 3 function Person(name){ 4 //私有属性,只能在对象构造函数内部 ...

  6. 20_python基础—面向对象-私有属性和私有方法

    文章目录 一.应用场景及定义方式 二.伪私有属性和私有方法(科普) 一.应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 ...

  7. Python之面向对象 私有属性和私有方法

    私有属性和私有方法 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私有方法 ...

  8. php protected 属性,PHP实现在对象之外访问其私有属性private及保护属性protected的方法...

    本文实例讲述了PHP实现在对象之外访问其私有属性private及保护属性protected的方法.,具体如下: public 表示全局的访问权限,类内部外部子类都可以访问: private表示私有的访 ...

  9. 【编程开发】Python隐藏属性——使用双下划线标识私有属性,外部不可直接访问...

    from:https://zhuanlan.zhihu.com/p/30553607 小编在最初使用上Python之后,就一发不可收拾,人生苦短.我用Python,不光是因为其优雅简洁,更是因为它强大 ...

最新文章

  1. Google I/O 2017 大会时间表出炉:安卓 8.0 时代来临
  2. STL set multiset
  3. DNS解析污染原理——要么修改包,要么直接丢弃你的网络包
  4. mysql类 php100_PHP100中,制作自己的PHP.MYSQL类中:Access denied for user ''@'localhost' (using password: NO)...
  5. 看看牛人们是怎么评价编程语言的
  6. 数据结构:静态查找动态查找
  7. 英特尔布局5G 提供端到端的解决方案
  8. mysql replace first_Java replaceFirst()方法
  9. C++拾遗(四)——顺序容器
  10. python读取python源代码文件_python 读写excel文件操作示例【附源码下载】
  11. Java案例:输出指定范围内纯素数个数
  12. 杭电2122Ice_cream’s world III
  13. Q123:PBRT-V3,各种形式的“光传播方程”的推导依据
  14. C++虚函数调用的反汇编解析
  15. 何为自动化测试?(纯干货)
  16. 【Nginx】503 Service Temporarily Unavailable
  17. 手机向服务器发信息吗,给手机发短信
  18. SpringBoot入门-统一错误码
  19. 基于stm32的自动循迹及自动搬运物联网图传小车
  20. 20选1,来挑一款最棒的JSON编辑器吧,用好工具,可提前60分钟下班

热门文章

  1. c语言实验 正弦csdn,实验2 正弦波振荡器(LC振荡器和晶体振荡器)
  2. 安装Docker Desktop报错WSL 2 installation is incomplete
  3. 错误代码:1120 当前Hsql数据库已被另一线程锁定
  4. 官网jquery压缩版引用地址
  5. 【Luogu3371】【模板】单源最短路径(SPFA)
  6. 【编译器】Mac下gcc环境配置折腾
  7. java 军工_为什么军工行业不用java而是选择继续用c(对于业务系统Java是非常合适的而不带操作系统的板子甚至可以做到微秒级别的实时控制)...
  8. JAVA多线程→进程与线程、线程周期、实现线程Thread、start()sleep()join()、线程互斥synchronized()锁当前对象this或方法、线程同步wait()notify()
  9. 根据mysql生成数据库设计文档_通过navicat工具导出数据库的word格式的设计文档...
  10. Python入门--字符串的判断操作