このシングルトン メタクラスを定義しました。
class Singleton(type):
"""Metaclass which implements the singleton pattern"""
_instances = {}
def __call__(self, *args, **kwargs):
if self not in self._instances:
self._instances[self] = super(Singleton, self).__call__(*args, **kwargs)
return self._instances[self]
ここで、すべてが正常に機能するかどうかをテストしたいと思います。これが私が試したことです:
- 同じクラス (
Singleton
メタクラスとして持つクラス) の 2 つのオブジェクトを作成しました - それらのid()
一致 - 1 つのオブジェクトを作成し、それを 2 番目の変数に割り当てました - それらの
id()
一致 - モジュールをインポート
copy
し、最初のオブジェクトをコピーしましたcopy.copy()
-それらid()
は現在一致しません
コピーされたオブジェクトの ID が元のオブジェクトと一致しない理由を知りたいです。シングルトンなので、2 つのオブジェクトが同じ ID を持つべきではありませんか?