3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
16 class _CMSingleton(type):
19 def __call__(cls, *args, **kwargs):
20 if cls not in cls._instances:
21 cls._instances[cls] = super(_CMSingleton, cls).__call__(*args, **kwargs)
22 return cls._instances[cls]
25 class CMSingleton(_CMSingleton('SingletonMeta', (object,), {})):
30 class TestSingleton(CMSingleton):
41 return 'Counter now is %d' % self.counter
43 instance1 = TestSingleton()
45 instance2 = TestSingleton()
50 if __name__ == '__main__':