1

リモート サーバーからコンテンツを取得する必要がある変数が 1 つあるので、そのコンテンツが本当に必要になるまで待ちます。プロパティを使用する場合はやろうと思ったのですが、何か間違っているようです。例に従ってください。

def download():
    return 'content from remote server'

class Foo:
    def __init__(self):
        self.downloaded_bar = False
        self.bar = None

    @property
    def bar():
        if not self.downloaded:
            self.bar = download()
            self.downloaded = True
        return self.bar

f = Foo()
print f.bar #prints None, I expected 'content from remote server'

私は何を間違っていますか?

4

1 に答える 1

5

Foo記述子を機能させるには、新しいスタイル クラスを作成する必要があります。また、属性と同じ名前のプロパティを持つことはできないので 、タイプミスを修正する必要もあります (downloaded_bar)に変更.barしました._bar

def download():
    return 'content from remote server'

class Foo(object):                    # Inherit from object for new style class!
    def __init__(self):
        self.downloaded = False
        self._bar = None

    @property
    def bar(self):
        if not self.downloaded:
            self._bar = download()
            self.downloaded = True
        return self._bar

f = Foo()
print f.bar     def download():
    return 'content from remote server'

downloaded実際には、おそらく属性はまったく必要ありません

class Foo(object):
    def __init__(self):
        self._bar = None

    @property
    def bar(self):
        if self._bar is None:
            self._bar = download()
        return self._bar

f = Foo()
print f.bar 
于 2012-06-19T22:55:55.010 に答える