Pythonデザインパターンのシングルトンモード-ロガーのシングルトンを実現する

1.シングルトンモードの概要

概要:クラスのインスタンスが1つだけ必要であり、グローバルアクセスポイントを提供します。

アプリケーションシナリオ:ログ挿入、タイマー、権限検証、リサイクルビン、Webサイトカウンター、スレッドプール、データベース接続プールなどのリソースプール。

 

 第二に、ログレコーダーの実現

オブジェクトのインスタンス化プロセスは、__new__方法最初にクラスを実行することです。クラスを記述しない場合__new__デフォルトオブジェクトメソッドが呼び出され、インスタンス化されたオブジェクトが返され、__init__方法このオブジェクトを初期化するために呼び出されます。これに基づいてシングルトンを実装できます。

__new__方法中まず、クラスにインスタンスがあるかどうかを判断します。インスタンスがある場合直接返され、インスタンスがない場合は作成されます。

# coding=utf-8

class Singleton(object):
    """
    单例类
    """
    _instance = None

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(cls)     # python3
            # cls._instance = super(Singleton, cls).__new__(cls,*args, **kwargs)     # python2
        return cls._instance

class Logger(Singleton):
    """
    日志
    """
    def __init__(self, file_name):
        self.filename = file_name

    def _write_log(self, level, msg):
        with open(self.filename, "a") as log_file:
            log_file.write("[{0}]{1}\n".format(level, msg))

    def critical(self, msg):
        self._write_log("CRITICAL", msg)

    def error(self, msg):
        self._write_log("ERROR", msg)

    def warn(self, msg):
        self._write_log("WARN", msg)

    def info(self, msg):
        self._write_log("INFO", msg)

    def debug(self, msg):
        self._write_log("DEBUG", msg)

if __name__ == '__main__':
    log1 = Logger("logger1.log")
    log2 = Logger("logger2.log")
    print(id(log1), log1.filename)
    print(id(log2), log2.filename)
    log1.info("log1************")
    log1.warn("log1************")
    log2.info("log2************")
    log2.warn("log2************")

コンソール出力は次のとおりです。

566521222648 logger2.log
566521222648 logger2.log

logger2.logファイルを生成します。ファイルの内容は次のとおりです。

[INFO] log1 ************ 
[WARN] log1 ************ 
[INFO] log2 ************ 
[WARN ] log2 ************

結果は次のことを示しています。ログ情報の内容が同じファイルに記録されている

 

参照

[ウェッセルバーデンホルスト]実用的なPythonデザインパターン:一般的な問題のパイロニ​​ックソリューション

https://blog.csdn.net/sxb0841901116/article/details/78506643

https://blog.csdn.net/Burgess_zheng/article/details/86762248#%C2%A0%20%C2%A0%C2%A0%20%C2%A0%20%C2%A05.%E5%8D% 95%E4%BE%8B%E6%A8%A1%E5%BC%8F%EF%BC%88シングルトン%EF%BC%89

https://www.runoob.com/design-pattern/singleton-pattern.html

おすすめ

転載: blog.csdn.net/qq_40602000/article/details/106573829