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

能理解就理解,不能理解就先撸起袖子抄一遍

折腾了一半个上午,小小的一个创建单例对象的小程序才搞定,本着多输出的思想,就把这个小过程给记录一下,直接上代码:

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对缩进要求很严格,有一处缩进错误就会报错,可是加一个报错是

Traceback (most recent call last):
  File "code_one.py", line 16, in 

在对象判断是报错没有定义,当时我在代码中查看明明在类中已经定义了,这是什么原因呢?内心一万只乌鸦飞过,最后仔细核对了一下代码,判断时少加了cls.,如果不加cls.这个仅只是变量并不是对象,我是这 样的理解的,我们判断的是对象是否存在,当然要用对象去判断,加上cls.以后运行程序就完美结束了!

总结:

工具只是帮助我们提高工作效率,并不能帮我们完成工作。关键还是使用工具的人要深入了解学习内容的本质。用什么工具倒不是最重要 。

你可能感兴趣的:(记一次创建单例对象的填坑过程)