Python 实现单例模式

# 使用Python实现单例模式

# 方法一: 使用__new__方法
class SingleTon(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, ‘_instance‘):
            cls._instance = object.__new__(cls, *args, **kwargs)
        return cls._instance

class TestClass(SingleTon):
    a = 1

# 方法二: 使用装饰器(decorator)
def SingleTon1(cls, *args, **kwargs):
    instances = {}
    def _singleTon():
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return  instances[cls]
    return _singleTon

@SingleTon1
class TestClass1(object):
    a = 1

# 共享属性  属性是共享的,但是并非单例模式
class SingleTon3(object):
    _state = {}
    def __new__(cls, *args, **kwargs):
        obj = object.__new__(cls, *args, **kwargs)
        obj.__dict__ = cls._state
        return obj

class TestClass3(SingleTon3):
    a = 1

test1 = TestClass3()
test2 = TestClass3()
test1.a = 2
print(test1.a)
print(test2.a)
print(test1)
print(test2)
时间: 2024-10-14 05:45:18

Python 实现单例模式的相关文章

python的单例模式:

python的单例模式:http://funhacks.net/2017/01/17/singleton/ https://www.cnblogs.com/huchong/p/8244279.html#_labelTop https://blog.csdn.net/weicao1990/article/details/79108193 django的相同名字的logger是单例模式的:logger1 = logging.getLogger('erebus') logger1是一个单例模式的实例

Python实现单例模式

Python实现单例模式 单例模式 介绍 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 主要解决:一个全局使用的类频繁地创建与销毁. 何时使用:当您想控制实例数目,节省系统资源的时候. 如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建. 关键代码:构造函数是私有的. 应用实例: 1.一个班级只有一个班主任. 2.Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行

python实现单例模式的三种方式及相关知识解释

python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singleton实现的四种方法都是python的重要特征,反过来也刚好是几种特征的最佳实现.(比如你平常开发中很难遇到几个需要写元类的地方)如果不能随手写出某种实现,说明你对于那种实现的概念还没有完全掌握.最近场通过写装饰器模式的singleton来复习装饰器概念. 1. module实现 #模块实现 from

Python入门之Python的单例模式和元类

本章内容 一.单例模式 二.元类 ============================= 一.单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在. 当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场.例如,某个服务器程序的配置信息存放在一个文件中,客户通过一个AppConfig的类来读取配置文件的信息.如果在程序运行期间,有很多地方需要使用配置文件的内容,也就是说,很多地方都需要创建AppConf

python中单例模式

一.单例模式设计基础概念: 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 目的:让 类 创建对象,在系统中只有唯一的一个实例子 每一次执行 类名()返回的对象.内存地址是相同的 二.__new__方法: 使用类名()创建对象,Python解释器首先会调用__new__()方法为对象分配空间 __new__()是一个由objec基类提供的内置的静态方法,

python中单例模式的实现-通过闭包函数和魔术方法__new__实现单例模式

1.通过闭包函数实现单例模式: # 使用闭包函数实现单例 def single(cls, *args, **kwargs): instance = {} def get_instance(): if cls not in instance: instance[cls] = cls(*args, **kwargs) return instance[cls] return get_instance @single class Apple: pass a = Apple() b = Apple() p

Python的单例模式

一.何为单例模式 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点. 实现某个类只有一个实例的途径: 1.让一个全局变量使得一个对象被访问,但是他不能防止外部实例化多个对象. 2.让类自身保存他的唯一实例,这个类可以保证没有其他实例可以被创建. 多线程时的单例模式:加锁-双重锁定 饿汉式单例类:在类被加载时就将自己实例化(静态初始化).其优点是躲避了多线程访问的安全性问题,缺点是提前占用系统资源. 懒汉式单例类:在第一次被引用时,才将自己实例化.避免开始时占用系统资源,但是有多线程

python 之单例模式

单例模式1 单例=>只有一个单例2 静态方法+静态字段3 所有实例中等转的内容相同时 用单例模式class Sqllite: __instance=None def __init__(self): self.ip="127.0.0.1" self.port=3306 self.pwd="123456" self.username="root" self.conn_list=[1,2,3,4,5,6,7] @staticmethod def

Python设计模式——单例模式

单例模式是日常应用中最广泛的模式了,其目的就是令到单个进程中只存在一个类的实例,从而可以实现数据的共享,节省系统开销,防止io阻塞等等 但是在多进程的应用中,单例模式就实现不了了,例如一些web应用,django,这些,因为会启动多条进程来监听http请求,这样的会通过单例模式是实现不了数据共享的,也就是实现不了单例模式的目的了,这时可以尝试使用redis这些nosql数据库阿里实现数据共享,因为它们的读取数据库,当然也可以用mysql等数据库来共享,但是并发量一大,系统的压力就会很大了. #e