Python中描述符的使用示例

Python中描述符的使用示例,python,descriptor,Python,Descriptor,我希望这个问题不要太开放。阅读之后,我终于用Python“获取”了描述符。但是我在它们上面看到的一切只是描述了如何使用它们来实现静态方法、类方法和属性 我理解这些的重要性,但是Python中的描述符还有哪些其他用途呢?我希望我的代码实现什么样的魔法,而这些魔法只能使用描述符实现(或者至少最好使用描述符实现)?延迟加载属性: import weakref class lazyattribute(object): def __init__(self, f): self.dat

我希望这个问题不要太开放。阅读之后,我终于用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]

我假设您也知道函数是描述符,并以这种方式实现绑定(和未绑定,在Python2中)方法?对。换一种说法,我想知道除了已经内置在语言中的描述符之外,还有其他描述符的用途。很遗憾,你有趣的问题在一天之内就解决了。ORM的设计中有一个常见的用例,例如Django使用您在相关对象上免费获得的内容。@wim不幸的是,在这个网站上,问题的结束有些随意。我投票决定重新开业。我仍然对Python的这一神秘特性感到好奇。@asmurer:无论如何,在新的文档特性中,这个问题的答案最好作为示例。接近的理由在技术上是正确的(这个问题没有正确的答案),但这并不意味着讨论没有价值。所以基本上是缓存。@asmuler:基本上,是的
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