在python中,如需让一个类只能创建一个实例对象,怎么能才能做到呢?

  思路:1.通过同一个类创建的不同对象,都让他们指向同一个方向。

       2.让个类只能创建唯一的实例对象。

  方法:用到 _ _new_ _ 方法

  '''定义一个类'''

  让这个类自己通过new方法创建一个对象

  并在每次创建对象时进行判断,如果变量 实例对象 没有 那就创建,否则指向已创建单例对象

   代码示例:

# coding=utf-8
class CarFactory(object):
  """定义一个汽车厂类"""
  __first_new = True    # 定义一个变量 首次创建 为真
  __instance = None    # 定义一个变量 单例对象 没有

  def __new__(cls):
  """定义一个__new__方法"""
  if cls.__first_new:               # 如果变量:首次创建 为真
    cls.__instance = object.__new__(cls)      # 则创建当前实例对象 cls.__instance 指向 object.__new__(cls)
    cls.__first_new = False          # 创建完一个对象后让他为 False
    return cls.__instance            # 返回创建的实例对象
  else:
    return cls.__instance            # 如果变量:首次创建 为False 直接返回上一次实力对象

feng_tian = CarFactory()
da_zhong = CarFactory()
print(feng_tian)
print(da_zhong)

输出:

指向同一个方向

单例模式【python】的更多相关文章

  1. 单例模式-python

    单例模式 什么是单例 当实例化多次得到的对象中存放的属性都一样的情况,应该将多个对象指向同一个内存,即同一个实例 有什么优点 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管 ...

  2. Python __new__ 实现单例模式 python经典面试题

    话不多说,上代码 class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance' ...

  3. python 单例模式获取IP代理

    python 单例模式获取IP代理 tags:python python单例模式 python获取ip代理 引言:最近在学习python,先说一下我学Python得原因,一个是因为它足够好用,完成同样 ...

  4. python 四种单例模式

    1 使用__new__方法 Python class Singleton(object): def __new__(cls, *args, **kw): if not hasattr(cls, '_i ...

  5. Python - 面对对象(其他相关,异常处理,反射,单例模式,等..)

    目录 Python - 面对对象(其他相关,异常处理,反射,等..) 一.isinstance(obj, cls) 二.issubclass(sub, super) 三.异常处理 1. 异常处理 2. ...

  6. python之路 目录

    目录 python python_基础总结1 python由来 字符编码 注释 pyc文件 python变量 导入模块 获取用户输入 流程控制if while python 基础2 编码转换 pych ...

  7. python 黑魔法收集--已结

    awesome python 中文大全 Fabric , pip, virtualenv 内建函数好文 awesome python 奇技淫巧 一句话求阶乘 from functools import ...

  8. day23单例模式 , 日志处理 , 项目结构目录

    # day23笔记 ## 一.补充,作业 ### 1.字符串格式化 ```pythonmsg = "我是%(n1)s,年龄%(n2)s" % {'n1': 'alex', 'n2' ...

  9. python之路(转载)

    Python之路   Python生产环境部署(fastcgi,uwsgi)   Django   缓存.队列(Memcached.redis.RabbitMQ)   Python(九) Python ...

  10. python中的__new__、__init__和__del__

    __new__.__init__.__del__三个方法用于实例的创建和销毁,在使用python的类中,我们最常用的是__init__方法,通常称为构造方法,__new__方法几乎不会使用,这篇文章是 ...

随机推荐

  1. python2和3的区别丶网络编程以及socketserver多线程

    一丶python2和python3的区别 1.编码&字符串 字符串: python2: Unicode v = u"root"  本质上用unicode存储(万国码) (s ...

  2. path的join和resolve

    连接路径:path.join([path1][, path2][, ...]) path.join()方法可以连接任意多个路径字符串.要连接的多个路径可做为参数传入. path.join()方法在接边 ...

  3. C# 执行可执行文件

    可以用C#脚本执行可执行文件,一般可以用C# IO流写出.bat脚本,然后顺带执行脚本,然后滑稽.三连... Process proc = null; try { proc = new Process ...

  4. 【Android开发笔记】生命周期研究

    启动 onCreate onStart onResume 退出键 onPause onStop onDestroy 锁屏 & 按住 home键 & 被其他Activity覆盖(Sing ...

  5. 【extjs6学习笔记】1.11 初始: config

    Ext JS有一个名为config的功能. 该配置允许您使用默认值声明公共属性,这些属性将被其他类成员完全封装. 通过config声明的属性将自动获取get()和set()方法,如果类没有定义这些方法 ...

  6. Unix系统中常用的信号含义

    http://blog.csdn.net/u012349696/article/details/50687462 编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ...

  7. 6.3安装squid

    1. Frist you need to install Development tools #yum groupinstall "Development Tools" 2. Ge ...

  8. 2017.12.24 Java序列化你不知道的事(二)

    1 序列化允许重构 序列化允许一定数量的类变种,甚至重构之后也是如此,ObjectInputStream 仍可以很好地将其读出来. Java Object Serialization 规范可以自动管理 ...

  9. python_63_装饰器6

    #decorator意思:1.装饰器 2.语法糖 import time user,passwd='qi','123' def auth(func): def wrappper(*args, **kw ...

  10. 洛谷P1220 关路灯【区间dp】

    题目:https://www.luogu.org/problemnew/show/P1220 题意:给定n盏灯的位置和功率,初始时站在第c盏处. 关灯不需要时间,走的速度是1单位/秒.问把所有的灯关掉 ...