解析:Python中类方法的功能继承

时间:2020-10-02 07:41:14

标签: python python-3.x parsing functools

在某些情况下,我正在尝试为搜索语言编写解析器。目前,我有很多类方法可以接受令牌,只要令牌满足特定条件,但是似乎可以用(新编写的)方法<h2>Module 1.1</h2> <p>Course content about module 1.1 goes here</p> <script src="glossary.js?m=1.1"></script> <h2>Module 1.2</h2> <p>Course content about module 1.2 goes here</p> <script src="glossary.js?m=1.2"></script>封装它们的一般结构/格式。

_accept_generic

当前代码的问题是它将引发错误(因为条件是在函数参数中而不是在if语句class Parser(object): ... def now(self): # now = self._tokens[self._pos] if not self.end() else None # print(now, self._pos) return self._tokens[self._pos] if not self.end() else None def end(self): return self._pos == self._length def step(self): self._pos += 1 def _accept_generic(self, criterion): if not self.end(): if criterion: self.step() return True return False def _accept(self, char): return self._accept_generic(self.now() == char) # if not self.end(): # if self.now() == char: # self.step() # return True # return False def _accept_re(self, regex): return self._accept_generic(regex.match(self.now())) # if not self.end(): # if regex.match(self.now()): # self.step() # return True # return False def _accept_any_res(self, *regexes): return self._accept_generic(any([r.match(self.now()) for r in regexes])) # if any([r.match(self.now()) for r in regexes]): # self.step() # return True # return False def _accept_all_res(self, *regexes): return self._accept_generic(all([r.match(self.now()) for r in regexes])) # if all([r.match(self.now()) for r in regexes]): # self.step() # return True # return False 中进行评估的)。有没有办法使用例如functools允许函数继承泛型的结构,能够在子函数的代码中指定新参数,而不必重复编写相同的代码块? if not self.end()并没有真正满足我的需求。

1 个答案:

答案 0 :(得分:2)

您可以使标准成为函数并将其传递给_accept_generic

def _accept(self, char):
        return self._accept_generic(lambda c=char: self.now() == c)

然后致电_accept_generic

def _accept_generic(self, criterion):
        if not self.end():
            if criterion():
                self.step()
                return True
        return False