我有一个类变量BASE_MATCHER
(如果我理解正确的话,在所有实例中共享值)
class PatchsetBase():
# https://github.com/kullo/smartsqlite
BASE_MATCHER = re.compile("https://github.com/([-a-z0-9]+)/([a-zA-Z0-9]+)(\.git)?")
def __init__(self, url):
match = BASE_MATCHER.match(url)
if not match:
raise InvalidGithubUrl("base url is not valid: '" + url + "'")
self.user = match.group(1)
self.project = match.group(2)
现在Python3在构造函数中告诉我:
NameError: name 'BASE_MATCHER' is not defined
我需要显式地调用PatchsetBase.BASE_MATCHER
才能使其工作。在
有什么优雅的方法可以消除这种冗余吗?在
一种方法是通过向其传递第三个默认参数,使其在
__init__
内可见,该参数包含您需要访问的BASE_MATCHER
对象:现在您可以访问
^{pr2}$__init__
内的这个对象,而不需要NameError
。您也可以将默认参数命名为BASE_MATCHER
,如果这是一个问题:这确实很好,但我说实话,这确实让我觉得有点不舒服。在
另一个选项(如注释中所指出的)是使用}的共享对象。这是访问类变量的自然方式,但是,我不知道,至少从视觉方面来看,这是否比
无论哪种方式,不完全确定你所定义的优雅,但这是两个简单的选择,你可以考虑。在self
访问带有{PatchsetBase.BASE_MATCHER
更优雅。在相关问题 更多 >
编程相关推荐