记一次创建单例对象的填坑过程

能理解就理解,不能理解就先撸起袖子抄一遍
折腾了一半个上午,小小的一个创建单例对象的小程序才搞定,本着多输出的思想,就把这个小过程给记录一下,直接上代码:

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.以后运行程序就完美结束了!
总结:
【记一次创建单例对象的填坑过程】工具只是帮助我们提高工作效率,并不能帮我们完成工作。关键还是使用工具的人要深入了解学习内容的本质。用什么工具倒不是最重要 。

    推荐阅读