现场人口(ReviewBoard代码)

时间:2014-07-29 23:02:00

标签: python review-board

我正在对ReviewBoard(RBtools)进行自定义修改;但是,我似乎无法理解Python在这一步中隐含着什么。

我想了解ReviewBoardServerself.info.path设置其值的位置。

我逐步调试调试器并将其追踪到

行上的method check_api_version
self.root_resource = root_resource

在此声明之前,我们self.infoNone,但在上一行之后很快就会变为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

1 个答案:

答案 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,则将其设置为某个值,然后将其值作为值返回属性。