提供了评估语言和表达式的方式
使用场景
- 解决重复类型的问题,
- 通过构建语法树解释语音
Demo
"""解释器模式"""class Expression:def interpret(self, context):raise NotImplementedError()class TerminalExpression(Expression):def __init__(self, data: str):self.data = datadef interpret(self, context: str):if context.find(self.data) > -1:return Truereturn Falseclass OrExpression(Expression):def __init__(self, expr1: Expression, expr2: Expression):self.expr1 = expr1self.expr2 = expr2def interpret(self, context):return self.expr1.interpret(context) or self.expr2.interpret(context)class AndExpression(Expression):def __init__(self, expr1: Expression, expr2: Expression):self.expr1 = expr1self.expr2 = expr2def interpret(self, context):return self.expr1.interpret(context) and self.expr2.interpret(context)def get_male_expression():r = TerminalExpression('r')m = TerminalExpression('m')return OrExpression(r, m)def get_married_woman_expression():j = TerminalExpression('j')m = TerminalExpression('m')return AndExpression(j, m)if __name__ == '__main__':is_male = get_male_expression()print("r is male:", is_male.interpret('r'))is_married_expression = get_married_woman_expression()print(f"ju is a married women:", is_married_expression.interpret('j m'))
