我正在对ReviewBoard(RBtools)进行自定义修改;但是,我似乎无法理解Python在这一步中隐含着什么。
我想了解ReviewBoardServer
在self.info.path
设置其值的位置。
我逐步调试调试器并将其追踪到
行上的method check_api_version
self.root_resource = root_resource
在此声明之前,我们self.info
为None
,但在上一行之后很快就会变为SVNRepositoryInfo
。
上面的行未在该行中设置self.info
的类字段。我猜测Python正在做一些事情,允许它通过设置self._info
来填充self.root_resource
?它是否正确?如果是这样,我会在哪里找到更多相关信息?
作为参考,init方法如下:
185 class ReviewBoardServer(object):
186 """
187 An instance of a Review Board server.
188 """
189 def __init__(self, url, info, cookie_file):
190 self.url = url
191 if self.url[-1] != '/':
192 self.url += '/'
193 self._info = info
194 self._server_info = None
195 self.capabilities = None
196 self.root_resource = None
197 self.deprecated_api = False
198 self.rb_version = "0.0.0.0"
199 self.cookie_file = cookie_file
200 self.cookie_jar = cookielib.MozillaCookieJar(self.cookie_file)
201 self.deprecated_api = False
202 self.root_resource = None
作为参考,特定文件托管在Github上面: https://github.com/reviewboard/rbtools/blob/release-0.4.3/rbtools/postreview.py
答案 0 :(得分:1)
你可以做这样的事情"引擎盖下#34;在Python中使用描述符和内置的property()
函数。
有关详细信息,请参阅文档中的Implementing Descriptors。
postreview.py
源文件包含以下行:
627 info = property(_get_server_info)
为名为__get__()
的{{1}}类属性定义ReviewBoardServer
函数。
info
的定义正好在源代码中:
_get_server_info()
正如您所看到的,每当检索到def _get_server_info(self):
if not self._server_info:
self._server_info = self._info.find_server_repository_info(self)
return self._server_info
的值时,如果info
的值为self._server_info
,则将其设置为某个值,然后将其值作为值返回属性。