import weakref
class Cached(type):
def __init__(cls, *args, **kwargs):
super().__init__(*args, **kwargs)
# weakref 不影响GC
# 缓存中常用 weakref
cls._cache = weakref.WeakValueDictionary()
def __call__(cls, *args):
# tuple 作为 key
if args in cls._cache:
return cls._cache[args]
else:
# 此处对调用 Logger类中的 __new__ __init__ 方法
obj = super().__call__(*args)
cls._cache[args] = obj
return obj
class CachedBase(metaclass=Cached):
pass
class Logger(CachedBase):
# Logger() 首先会走到元类的 __call__ 方法
def __init__(self, name):
self.name = name
if __name__ == '__main__':
l1 = Logger('l1')
l2 = Logger('l2')
l3 = Logger('l1')
print(l1 is l2)
print(l1 is l3)
Python用元类实现缓存实例
原创
©著作权归作者所有:来自51CTO博客作者番东的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Python用元类实现单例
【代码】Python用元类实现单例。
python Database -
友元实例:友元类及友元函数
学习了c++这么久,一直没有对友元进行了解,据说友元不是特别好用(据说,不是我说的),因此直到今天才去了解。其实友元确实不是很常用,但友元功能确实很实用,它不但能够释放类中的非公有成员,同时还能保证了类的封装性。用户可以有选择为具体的类或函数赋予“通行证”。还是比较灵活的。比如:某个类去访问另一个类的私有成成员,或者一个函数去访问某个类的私有成员等等,都可以使用友元来实现。 下面就友元做了两个小例子,望高手指教。(每段代码都在不同的文件中)首先是关于友元类的代码,就一句话,很简单。。。Test.h:#ifndef TEST_H#define TEST_H#include<iostream
#include 友元函数 #endif #ifndef #define -
python中divs是什么意思
数学运算(7个) 类型转换(24个) 序列操作(8个) 对象操作(7个) 反射操作(8个) 变量操作(2个) 交互操作(2个) &nb
python中divs是什么意思 迭代 bc 字符串