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

问题描述

在某些情况下,我正在尝试为搜索语言编写解析器。目前,我有很多类方法可以接受令牌,只要令牌满足特定条件,但是似乎可以用(新编写的)方法<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()并没有真正满足我的需求。

解决方法

您可以使标准成为函数并将其传递给_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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...