美文网首页
记一次创建单例对象的填坑过程

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

作者: 胆小的米老鼠 | 来源:发表于2018-07-28 12:09 被阅读12次

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

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

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 <module
    dog1 = Dog()
  File "code_one.py", line 7, in __new__
    if instace == None:
NameError: name 'instace' is not defined

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

总结:

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

相关文章

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

    能理解就理解,不能理解就先撸起袖子抄一遍 折腾了一半个上午,小小的一个创建单例对象的小程序才搞定,本着多输出的思想...

  • 23种设计模式学习总结

    创建型设计模式 主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码合使用代码。 单例模式 单例模式用来...

  • iOS 单例模式 - 单例对象销毁【GCD】

    单例对象的创建方式 单例.h 文件的实现 单例的.m 文件的实现 单例对象的销毁【GCD创建的方式】 使用单例对象...

  • iOS 单例模式 - 单例对象销毁【@synchronized】

    单例对象的创建方式 单例.h 文件的实现 单例.m 文件的实现 单例对象的销毁【@synchronized创建方式...

  • 单例模式、异常、模块

    单例模式 创建单例-保证只有1个对象 创建单例时,只执行1次init方法 目的 —— 让 类 创建的对象,在系统中...

  • 关于单例模式

    静态实现单例模式能较少的使用内存,也具备一定的安全性 饿汉模式实现单例模式的原理是要一次单例对象就创建一个单例对象...

  • iOS开发之进阶篇(5)—— 单例

    目录 最终推荐写法 何为单例? 对象的创建 单例写法的讨论过程 1. 最终推荐写法 1.1 OC SingleOb...

  • 23种模式 - 总结

    创建型设计模式 创建型设计模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。包括:单例...

  • python面试题2

    python对象创建的过程python实现单例的几种方法@classmethod, @staticmethod用生...

  • UIApplication - 02模拟单例

    模仿UIApplication单例 - 实现过程, 要求如下:程序一启动就创建好了对象.只能获取对象,且获取的对象...

网友评论

      本文标题:记一次创建单例对象的填坑过程

      本文链接:https://www.haomeiwen.com/subject/qpcomftx.html