我喜欢 WritableWorkbook book = Workbook.getWorkbook(File file) ;
模块:https://pypi.python.org/pypi/cached-property
有没有办法为类获取缓存属性?
以下是"
的"属性的示例cached_property
用法:
class Foo(object):
@classmethod
def get_bar(cls):
return 'bar'
@cached_class_property
def bar(cls):
return 'bar'
使用"缓存"我的意思是对属性的第二次(以及后来的)调用返回第一次调用的值。
答案 0 :(得分:1)
属性只是描述符,当我们定义描述符时,总是会查找对象的类型。例如,将在其类中查找描述符,类似地,对于类,将查找其类型,即Metaclass。
import random
class cached_class_property(object):
def __init__(self, func):
self.func = func
self.name = '_' + func.__name__
def __get__(self, obj, type):
if obj is None:
return self
sentinel = object()
value = getattr(obj, self.name, sentinel)
if value is sentinel:
value = self.func(obj)
setattr(obj, self.name, value)
return value
class Meta(type):
@cached_class_property
def bar(cls):
value = random.random()
return value
class Foo(object):
__metaclass__ = Meta
<强>演示:强>
>>> %run so.py
>>> Foo.bar
0.3896508798298206
>>> Foo.bar
0.3896508798298206
>>> Foo.bar
0.3896508798298206
>>> class Bar(Foo):
... pass
...
>>> Bar.bar
0.3896508798298206
>>> Bar.bar
0.3896508798298206