Python——单例使用
Python单例的作用:在全局该类只有1个实例。
把类设置为单例,那么第一次调用这个类后,已经计算好的属性就存成了静态变量,后面调用该属性就直接用了,不用重复计算了。如果后面再调用的时候,某个属性没被计算过,那么就会进行计算,然后存成静态变量。
设置成单例的方法:适用于这个类需要被频繁调用(并且每次的计算开销比较大),这样就不用重复计算了,直接取所需的属性即可。用单例可以提高效率!
如果某个属性被修改后,那么在全局这个类属性就都变成了新的值!
单例代码示例:
import threading
def synchronized(func):
func.__lock__ = threading.RLock()
def lock_func(*args, **kwargs):
with func.__lock__:
return func(*args, **kwargs)
return lock_func
class Singleton(type):
_instances = {}
@synchronized
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(
Singleton, cls).__call__(
*args, **kwargs)
return cls._instances[cls]
import random
class A(object, metaclass=Singleton):
def __init__(self):
self.a = random.random()
a = A()
b = A()
print(id(a)) # 139910027848784
print(id(b)) # 139910027848784 即这两个实例对象的地址是一样的!
print(a.a) # 0.6519248674842676
b.a += 1
print(b.a) # 1.6519248674842677
print(a.a) # 1.6519248674842677 即属性被改变后,全局都改变了!
- 点赞
- 收藏
- 关注作者
评论(0)