• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python设计模式之单例模式实例

Python设计模式之单例模式实例

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了python 单例模式,java单例模式实例,单例模式实例,单例模式java,单例模式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

注:使用的是Python 2.7。

一个简单实现

if __name__ == '__main__':
    foo1 = Foo.getinstance()
    foo2 = Foo.getinstance()
    print id(foo1)
    print id(foo2)
    print id(Foo())</div>
输出的前两个结果是相同的(id(foo1)与id(foo2)的值相同),第三个结果和前两个不同。这里类方法getinstance()用于获取单例,但是类本身也可以实例化,这样的方式其实并不符合单例模式的要求。但是这样做也有好处,代码简单,大家约定好这样子调用就行了。但是最好在类的命名上也体现了出来这是一个单例类,例如Foo_singleton。

换一个思路

先说一下init和new的区别:

if __name__ == '__main__':
    foo = Foo()</div>
运行结果是:

new是一个类方法,会创建对象时调用。而init方法是在创建完对象后调用,对当前对象的实例做一些一些初始化,无返回值。如果重写了new而在new里面没有调用init或者没有返回实例,那么init将不起作用。以下内容引用自http://docs.python.org/2/reference/datamodel.html#object.new

If __new__() does not return an instance of cls, then the new instance's __init__() method will not be invoked.</div>
这样做:

    def __new__(cls, *args, **kwargs):
        print 'new'
        if cls.__instance == None:
            cls.__instance = cls.__new__(cls, *args, **kwargs)
        return cls.__instance

if __name__ == '__main__':
    foo = Foo()</div>

    错误如下:

而这样也有一样的错误:

if __name__ == '__main__':
    foo = Foo()</div>
该怎么做呢?

下面参考了http://stackoverflow.com/questions/31875/is-there-a-simple-elegant-way-to-define-singletons-in-python/31887#31887:

    def hi(self):
        print 'hi, world'
        print 'hi, letian'

if __name__ == '__main__':
    foo1 = Foo()
    foo2 = Foo()
    print id(foo1)
    print id(foo2)
    print isinstance(foo1, object)
    print isinstance(foo1, Foo)
    foo1.hi()</div>
运行结果:

     

您可能想查找下面的文章:

  • Python单例模式实例详解
  • python相似模块用例
  • Python设计模式中单例模式的实现及在Tornado中的应用
  • 常见的在Python中实现单例模式的三种方法
  • python单例模式实例分析
  • 常见的在Python中实现单例模式的三种方法
  • python单例模式实例分析
  • Python单例模式实例分析
  • Python单例模式实例分析
  • Python设计模式之单例模式实例

相关文章

  • tensorflow使用range_input_producer多线程读取数据实例
  • Pyramid将models.py文件的内容分布到多个文件的方法
  • 详解Python 数据库 (sqlite3)应用
  • Python中shutil模块的常用文件操作函数用法示例
  • Python实现的几个常用排序算法实例
  • 用Python抢过年的火车票附源码
  • python实现爬虫统计学校BBS男女比例(一)
  • Python字符编码判断方法分析
  • Python pickle类库介绍(对象序列化和反序列化)
  • 使用Python进行稳定可靠的文件操作详解

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 连接Python程序与MySQL的教程
    • gearman的安装启动及python API使用实例
    • Python连接数据库学习之DB-API详解
    • python 多线程实现检测服务器在线情况
    • 使用Python实现博客上进行自动翻页
    • Python中线程编程之threading模块的使用详解
    • Python 自动安装 Rising 杀毒软件
    • 开源Web应用框架Django图文教程
    • python在windows和linux下获得本机本地ip地址方法小结
    • python 简易计算器程序,代码就几行

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有