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为描述符创建一个新的样式类才能工作。您也不能拥有与属性同名的属性,因此我更改.bar._bar 您还需要修复错字(downloaded_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 回答