记一次创建单例对象的填坑过程
能理解就理解,不能理解就先撸起袖子抄一遍
折腾了一半个上午,小小的一个创建单例对象的小程序才搞定,本着多输出的思想,就把这个小过程给记录一下,直接上代码:
class Dog(object):
'''这是创建单例对象的类'''instace= None#设置一个变量初始值为None
def __new__(cls):
'''如果对象为空,就调用父类的__new__方法创建一个对象,如果对象已经创建,就反回上次创建的对象'''
if cls.instace == None:
cls.instace = object.__new__(cls)
return cls.instace
else:
return cls.instace#打印两个对象的内存地址
dog1 = Dog()
print(id(dog1))
dog2 = Dog()
print(id(dog2))
打印对象内存地址的结果如下,我们看到两个地址是一样一样的。
G:\notpad_code>python code_one.py
31817800
31817800
这段代码说明我们是如何来创建一个单例对象的,运行过程中遇到的很深的坑,好不容易才爬出来。
填坑过程: 第一,跟随教程在ubuntu里编写代码,一直报缩进错误,核对代码多次没有找到什么地方缩进错误,把原因推给了ubuntu,跟自己说不熟悉这个系统,解决措施,复制代码到Notepad++.
第二,Notpad++运行还是报错缩进错误,tap键换成4个空格,换了几次还是不好用,一气之下,把代码清空
重新写,这一次没有报缩进错误了,原因可能是复制过程代码出现了借位,python对缩进要求很严格,有一处缩进错误就会报错,可是加一个报错是
python">Traceback (most recent call last):
File "code_one.py", line 16, in
在对象判断是报错没有定义,当时我在代码中查看明明在类中已经定义了,这是什么原因呢?内心一万只乌鸦飞过,最后仔细核对了一下代码,判断时少加了
cls.
,如果不加cls.
这个仅只是变量并不是对象,我是这 样的理解的,我们判断的是对象是否存在,当然要用对象去判断,加上cls.
以后运行程序就完美结束了!总结:
【记一次创建单例对象的填坑过程】工具只是帮助我们提高工作效率,并不能帮我们完成工作。关键还是使用工具的人要深入了解学习内容的本质。用什么工具倒不是最重要 。
推荐阅读
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- 20170612时间和注意力开销记录
- 2018年11月19日|2018年11月19日 星期一 亲子日记第144篇
- 叙述作文
- 2019年12月24日
- 【故障公告】周五下午的一次突发故障
- 人生感悟记#环境仪器宋庆国成长记#072
- 2019.4.18感恩日记
- 我要我们在一起(二)