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
  • 相关阅读:
    基础数据类型补充、集合、深浅拷贝
    python中(id,is,==,)小数据池,代码块
    字典:python的基础数据类型
    五四青年节后记
    test
    agl---atumotive grade linux开篇
    传感器
    金字塔原理
    写在2017年底
    C# 输出16进值
  • 原文地址:https://www.cnblogs.com/weijiazheng/p/10502987.html
Copyright © 2011-2022 走看看