Python使用Decorator实现独身模式,pythondecorator,下面是要求独身的类定义,
Python使用Decorator实现独身模式,pythondecorator,下面是要求独身的类定义,
下面是要求独身的类定义,它被@Singleton修饰
@Singleton class Foo: def __init__(self): print 'Foo created' f = Foo() # Error, this isn't how you get the instance of a singleton f = Foo.Instance() # Good. Being explicit is in line with the Python Zen g = Foo.Instance() # Returns already created instance print f is g # True
下面是Singleton的实现:
class Singleton: """ A non-thread-safe helper class to ease implementing singletons. This should be used as a decorator -- not a metaclass -- to the class that should be a singleton. The decorated class can define one `__init__` function that takes only the `self` argument. Other than that, there are no restrictions that apply to the decorated class. To get the singleton instance, use the `Instance` method. Trying to use `__call__` will result in a `TypeError` being raised. Limitations: The decorated class cannot be inherited from. """ def __init__(self, decorated): self._decorated = decorated def Instance(self): """ Returns the singleton instance. Upon its first call, it creates a new instance of the decorated class and calls its `__init__` method. On all subsequent calls, the already created instance is returned. """ try: return self._instance except AttributeError: self._instance = self._decorated() return self._instance def __call__(self): raise TypeError('Singletons must be accessed through `Instance()`.') def __instancecheck__(self, inst): return isinstance(inst, self._decorated)
相关内容
- Gmail 发信,gmail发信,Python语言: Gm
- Python 将DOC word文档转换为PDF,,下面代码只能在windo
- python遍历目录树代码,python历目录树,from os.path
- Python 发email 带附件,python发email附件,Python 发emai
- python的日志logging模块使用总结,pythonlogging,1.简单的将
- python 判断操作系统类型代码,python操作系统,有时候需
- 使用python生成随机密码的例子,python生成例子,import r
- python将字符串转换为字节数组,python数组,#!/usr/bin/p
- python 获取mac地址的两种方法,pythonmac,(1)通用方法
- python计算数组、元祖等列表元素的和,python数组,print
评论关闭