zoukankan      html  css  js  c++  java
  • python单例模式

    python单例模式

    什么是单例模式?

    答:永远用一个对象的实例叫做单例模式

    什么时候用单例模式?

    答:创建的对象与对象之间内部封装的值是一样的,这时我们使用单例模式

    这是比较原始的方式创建单例模式

     1 #单例模式------low的方法创建单例模式
     2 class Foo(object):
     3 
     4     #静态变量:只属于类,只能被类调用
     5     incetiance = None
     6 
     7     def __init__(self):
     8         #一个局部变量
     9         self.name = "li"
    10 
    11     #静态方法
    12     @classmethod
    13     def get_incetiance(cls):
    14         if Foo.incetiance :
    15             return Foo.incetiance
    16         else:
    17             Foo.incetiance = Foo()
    18             return Foo.incetiance
    19 
    20 obj1 = Foo.get_incetiance()
    21 obj2 = Foo.get_incetiance()
    22 print(id(obj1),id(obj2))
    23 
    24 #输出结果是一样的
    25 # 35321616 35321616

    用高大上方法创建单例模式

     1 #单例模式---符合用户使用习惯的方法创建单例模式
     2 class Foo(object):
     3 
     4     #静态变量:只属于类,只能被类调用
     5     incetiance = None
     6 
     7     def __init__(self):
     8         #一个局部变量
     9         self.name = "li"
    10 
    11     #__new__方法在类中首先执行的方法,执行顺序在__init__方法之前
    12     def __new__(cls, *args, **kwargs):
    13         if Foo.incetiance:
    14             return Foo.incetiance
    15         else:
    16             Foo.incetiance = object.__new__(cls, *args, **kwargs)
    17             return Foo.incetiance
    18 
    19 obj1 = Foo()
    20 obj2 = Foo()
    21 print(id(obj1),id(obj2))
    22 
    23 #输出结果  35452688 35452688
  • 相关阅读:
    (转)C3P0连接池配置和实现详解
    (转)jquery插件Validate的使用
    二叉树和翻转二叉树
    利用@media screen实现网页布局的自适应
    (转)防止SQL注入的五种方法
    java代码规范
    Java泛型-类型擦除
    js中的isNaN()
    (转)sublime 一些常用功能和快捷键
    (转)java中不常见的关键字:strictfp,transient
  • 原文地址:https://www.cnblogs.com/weijiazheng/p/10502987.html
Copyright © 2011-2022 走看看