2

この質問があまりにもオープンエンドではないことを願っています。http://python-history.blogspot.com/2010/06/inside-story-on-new-style-classes.htmlを読んだ後、ついにPythonで記述子を「取得」しました。しかし、私が見たものはすべて、それらを使用して静的メソッド、クラス メソッド、およびプロパティを実装する方法を説明しているだけです。

これらの重要性は理解していますが、Python の記述子には他にどのような用途がありますか? 記述子を使用してのみ実装できる (または少なくとも記述子を使用して実装するのが最適な) コードで実行できる魔法は何ですか?

4

1 に答える 1

3

遅延読み込みプロパティ:

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
于 2013-02-20T20:28:08.763 に答える