我希望这个问题不会太开放。阅读http://python-history.blogspot.com/2010/06/inside-story-on-new-style-classes.html后,我终于“得到”了 Python 中的描述符。但是我在它们上看到的所有内容都只是描述了它们如何用于实现静态方法、类方法和属性。
我很欣赏这些的重要性,但是 Python 中的描述符还有哪些其他用途呢?我可能希望我的代码具有什么样的魔法,只能使用描述符来实现(或者至少最好使用描述符来实现)?
我希望这个问题不会太开放。阅读http://python-history.blogspot.com/2010/06/inside-story-on-new-style-classes.html后,我终于“得到”了 Python 中的描述符。但是我在它们上看到的所有内容都只是描述了它们如何用于实现静态方法、类方法和属性。
我很欣赏这些的重要性,但是 Python 中的描述符还有哪些其他用途呢?我可能希望我的代码具有什么样的魔法,只能使用描述符来实现(或者至少最好使用描述符来实现)?
延迟加载的属性:
import weakref
class lazyattribute(object):
def __init__(self, f):
self.data = weakref.WeakKeyDictionary()
self.f = f
def __get__(self, obj, cls):
if obj not in self.data:
self.data[obj] = self.f(obj)
return self.data[obj]
class Foo(object):
@lazyattribute
def bar(self):
print "Doing a one-off expensive thing"
return 42
>>> f = Foo()
>>> f.bar
Doing a one-off expensive thing
42
>>> f.bar
42