码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2019-12-05 01:20:13      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:print   python   import   war   imp   pytho   this   table   star   

装饰器实现

# singleton.py

import pymongo

from functools import wraps

def singleton(cls):
    _instance = {}

    @wraps(cls)
    def get_instance(*args, **kwargs):
        if cls not in _instance:
            _instance[cls] = cls( *args, **kwargs)
        return _instance[cls]

    return get_instance

@singleton
class MyMongoClient(pymongo.MongoClient):
    def __str__(self):
        return (‘this is a 单例模式的应用‘)


if __name__ == ‘__main__‘:
        cli = MyMongoClient()
        print(cli)
        cli2 = MyMongoClient()
        print( cli is cli2)


代码演示如下:

(py3) jfxu@iZbp1gmf2s484lvojwrs4dZ:~$ python singleton.py
this is a 单例模式的应用
True

__ new __ 方法实现

# singleton.py

import pymongo

class MyMongoClient(pymongo.MongoClient):

    _instance = None
    def __new__(cls,  *args, **kwargs):
        if not cls._instance:
            cls._instance = super(MyMongoClient, cls).__new__(cls, *args, **kwargs)
        return cls._instance

    def __str__(self):
        return ‘this is a 单例模式‘


if __name__ == ‘__main__‘:
    cli = MyMongoClient()
    print(cli)
    cli2 = MyMongoClient()
    print(cli is cli2)

代码演示如下:

(py3) jfxu@iZbp1gmf2s484lvojwrs4dZ:~$ python a.py
this is a 单例模式
True

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





单例模式

标签:print   python   import   war   imp   pytho   this   table   star   

原文地址:https://www.cnblogs.com/jfxu/p/11986631.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!