我有一个变量,它的内容,我需要从远程服务器获取,所以我宁愿等到真正需要的内容.我想如果使用一个属性,但似乎我做错了.根据例子.
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'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
您需要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'
Run Code Online (Sandbox Code Playgroud)
实际上你根本不需要这个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
Run Code Online (Sandbox Code Playgroud)