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
  • 相关阅读:
    【js效果】密码的显示和隐藏
    【js效果】竖向折叠二级菜单
    【js效果】单行文字滚动(从左到右)
    mysql:查询排名
    init_bootmem_node
    bootmem_init_node
    for_each_node(node)
    build_mem_type_table
    __vet_atags
    asm-offset.h 生成
  • 原文地址:https://www.cnblogs.com/weijiazheng/p/10502987.html
Copyright © 2011-2022 走看看